約 4,737,077 件
https://w.atwiki.jp/sampleisbest/pages/282.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 WaveTest2 アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト WaveTest2.cpp // WaveTest2 周波数 #pragma comment(lib, "winmm") #define _USE_MATH_DEFINES #include Windows.h #include math.h #include "resource.h" #define SAMPLING_RATE44100 #define DATA_NUMSAMPLING_RATE // 関数プロトタイプ宣言 INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnInitDialog(HWND hDlg); void OnDrawItem(WPARAM wParam, LPARAM lParam); void OnOK(HWND hDlg); void OnWomOpen(void); void OnWomDone(HWND hDlg); // 外部変数 HWAVEOUT hwo; WAVEHDR wh; BYTE waveformData[DATA_NUM]; //============================================================================== int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DlgProc); return 0; } INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR result = TRUE;// メッセージを処理した switch (uMsg) { case MM_WOM_OPEN OnWomOpen(); break; case MM_WOM_DONE OnWomDone(hDlg); break; case WM_DRAWITEM OnDrawItem(wParam, lParam); break; case WM_COMMAND switch (LOWORD(wParam)) { case IDOK OnOK(hDlg); break; case IDCANCEL EndDialog(hDlg, IDCANCEL); break; } break; case WM_INITDIALOG OnInitDialog(hDlg); break; case WM_CLOSE EndDialog(hDlg, 0); break; default result = FALSE;// メッセージを処理しなかった } return result; } void OnInitDialog(HWND hDlg) { for (int i = 0; i DATA_NUM; i++) { waveformData[i] = 128; } } void OnDrawItem(WPARAM wParam, LPARAM lParam) { LPDRAWITEMSTRUCT pdi = (LPDRAWITEMSTRUCT)lParam; HDC hdc = pdi- hDC; RECT rc; GetClientRect(pdi- hwndItem, rc); FillRect(hdc, rc, GetSysColorBrush(COLOR_WINDOW)); HPEN pen = CreatePen(PS_SOLID, 0, RGB(0,0,255)); HGDIOBJ penOld = SelectObject(hdc, pen); for (int i = 0; i rc.right; i++) { MoveToEx(hdc, i, rc.bottom / 2, NULL); LineTo(hdc, i, rc.bottom * (255 - waveformData[i]) / 256); } SelectObject(hdc, penOld); DeleteObject(pen); } void OnOK(HWND hDlg) { double freq = GetDlgItemInt(hDlg, IDC_FREQ, NULL, FALSE); for (int i = 0; i DATA_NUM; i++) { double t = fmod(freq * i / SAMPLING_RATE, 1); double y = sin(2 * M_PI * t); waveformData[i] = BYTE(128 + 64 * y); } InvalidateRect(GetDlgItem(hDlg, IDC_PREVIEW), NULL, FALSE); WAVEFORMATEX wfx; wfx.wFormatTag= WAVE_FORMAT_PCM; wfx.wBitsPerSample= 8; wfx.nChannels= 1; wfx.nSamplesPerSec= SAMPLING_RATE; wfx.nBlockAlign= (wfx.wBitsPerSample / 8) * wfx.nChannels; wfx.nAvgBytesPerSec= wfx.nSamplesPerSec * wfx.nBlockAlign; wfx.cbSize= 0; MMRESULT mmr = waveOutOpen( hwo, WAVE_MAPPER, wfx, (DWORD_PTR)hDlg, 0, CALLBACK_WINDOW); if (mmr != MMSYSERR_NOERROR) { return; } EnableWindow(GetDlgItem(hDlg, IDOK), FALSE); } void OnWomOpen(void) { wh.lpData= (LPSTR)waveformData; wh.dwBufferLength= DATA_NUM; wh.dwBytesRecorded= 0; wh.dwUser= 0; wh.dwFlags= 0; wh.dwLoops= 0; wh.lpNext= NULL; wh.reserved= 0; MMRESULT mmr = waveOutPrepareHeader(hwo, wh, sizeof wh); if (mmr != MMSYSERR_NOERROR) { return; } wh.dwFlags|= WHDR_BEGINLOOP | WHDR_ENDLOOP; wh.dwLoops= 1; mmr = waveOutWrite(hwo, wh, sizeof wh); } void OnWomDone(HWND hDlg) { waveOutReset(hwo); waveOutUnprepareHeader(hwo, wh, sizeof wh); waveOutClose(hwo); EnableWindow(GetDlgItem(hDlg, IDOK), TRUE); } resource.h #define IDD_DIALOG100 #define IDC_STATIC-1 #define IDC_PREVIEW1000 #define IDC_FREQ1001 WaveTest2.rc // resource script #include windows.h #include "resource.h" IDD_DIALOG DIALOGEX 100, 100, 320, 200 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "WaveText2" FONT 9, "MS Pゴシック" BEGIN LTEXT"",IDC_PREVIEW,10,10,300,150,WS_BORDER | SS_OWNERDRAW LTEXT"周波数( F)",IDC_STATIC,10,170,50,12 EDITTEXTIDC_FREQ,60,170,50,12 LTEXT"Hz",IDC_STATIC,120,170,20,12 DEFPUSHBUTTON"Play( P)",IDOK,260,170,50,15 END
https://w.atwiki.jp/oper/pages/1221.html
ATTO SECONDO (Il paesaggio la piazza di Sölden) (Nel fondo la chiesa alla quale si accede per un ampia gradinata. Da una parte all altra, traversalmente corrono striscie di tela colorata che ricoprono la piazza in parte (la parte riservata alle danze pubbliche). L osteria dell Aquila è a destra. Le finestre, la porta, le tavole, le panche, tutto vi è coperto ed ornato di rami frondosi e di fiori. Anche dalle finistre e dai ballatoi pendono drappi a colori, fronde, ghirlande. È tutto un paese vestito di festa! È il Corpus Domini.) (La piazza è gremita di gente; chi va e chi viene; chi si dà al discorrere; chi saluta e passa; chi ride; chi si trattiene a crocchi. Tutti i variopinti e pittoreschi costumi del Tirolo vivono e si muovono nella piccola piazza.) (Ecco là, il Pendore di Schnals già seduto davanti ad una enorme tazza di birra, in mezzo a un crocchio di giovanotti, che beve, ride, discute e qualche volta alla bell Alfra tutta in faccende (la padrone dell osteria dell Aquila) mormora parole che eccitano la facile allegria dei suoi ascoltatori! Là, in disparte, c è anche Gellner, anch egli vestito a festa, ma triste, sinistro, taciturno. Come egli è cambiato in un anno! (poichè è passato già l anno dalla sera che all Hochstoff, fu respinto dalla Wally e costei del padre messa alla porta.) ▼ALCUNE FANCIULLE▲ (attraversando la piazza e susurrano fra loro) Entro la folla che intorno s aggira, Nei dì di festa, è bello passegiar. ▼ALTRE FANCIULLE▲ (si succedono gaiamente ridendo) Là v è garzon che per me sospira! ▼TUTTE LE FANCIULLE▲ (additando) Là ve n è un altro che mi sta a guardar! (Al passare delle fanciulle avanti alla tavola dove siede, beve, sogghigna e fuma il pedone di Schnals.) ▼TENORI▲ (osservando) S io mi dovessi ora ammogliar, Di queste mogli non ne vorrei! Son volubili troppo nell amar E una fraschetta in casa non torrei! ▼VECCHIE▲ (attraversano la piazza e si avviano alla chiesa, soggurdano brontolando le belle ragazze) Già le campane suonano … E le preghiere echeggiano … Esse Dio non ascoltano … Ma ridono e cinguettano … Ed a mill altro pensano Che al piacer, le frivole … Ed alle vesti e ai bindoli, Che intorno a lor svolazzano! ▼BORGHESI▲ (sorridendo malignamente) O nonne saggie e venerate, Perchè con tanta furia Alla chiesa ne andate? Tanti anni son passati, Che le colpe di vostra gioventù Lo stesso Iddio non ricorda più! ▼ALCUNE FANCIULLE▲ Là v è un garzon che per me sospira! ▼ALTRE FANCIULLE▲ Là v è un altro che mi sta a guardar! ▼TENORI▲ S io mi dovessi ora ammogliar, Di queste moglie, affè! non prenderei! ▼TUTTI▲ Suona la squilla mattutina! È il dì di festa! (Le vecchie frettolose si avviano alla chiesa.) ▼IL PEDONE▲ (fumando in una lunga pipa di porcellana e rivolgendosi ai vicini) Or, per la via, ne ho incontrate assai Brigate allegre e giovinette belle! ▼TUTTI▲ Suona la squilla mattutina! È il dì di festa! ▼UOMINI▲ (alzandosi) Giorno è per noi di festa e d allegria! ▼IL PEDONE▲ (a un tratto si leva, guarda per la piazza e addita Walter che tutto in fronzoli se ne viene occhieggiando, curioso e un po spavaldo, le donne) Vedetelo venir il piccol Walter Tutto vestito a festa. ▼UOMINI▲ (beffardi) Oh! Il piccol seduttor! ▼VECCHIE E FANCIULLE▲ (scontrandosi con Walter mentre s avviano alla chiesa) Oh! Il bel corsetto! ▼IL PEDONE▲ (ironico a Walter) O che già fate l occhietto moribondo a maritate? ▼WALTER▲ (stizzito al Pedone) Ognun fa quel che gli piace! A voi il ber? A me le belle donne e amar! ▼IL PEDONE▲ Ah! ah! Or or la tua padrona m ho incontrata Che alla festa ne vien … ▼WALTER▲ (punto) Non ho padrone! ▼IL PEDONE▲ (sogghignando) Eh, via! Vo dir, colei che così ricche vesti ti diè! ▼WALTER▲ (furiente) La Wally è sol mia amica! (S allontana.) (Intanto Hagenbach si è seduto ad una tavola avanti all osteria dell Aquila. Afra accorre sorridente, felice. Tutto si fanno intorno all Hagenbach; chi gli stringe la mano, chi lo saluta, chi beve con lui.) ▼GIOVANOTTI▲ (continuando il discorso col Pedone) Avrem la Wally? ▼IL PEDONE▲ Sì; (con mistero) Ora che al diavol N è andato il vecchio Stromminger, Essa corre le feste e si diverte! ▼GELLNER▲ (lanciando un occhiata sinitra all Hagenbach) (La sciagurata! qui ne vien per lui!) (Gli sfugge un gesto di minaccia, poi a tratto si leva e si perde nella folla.) ▼IL PEDONE▲ (continua, aizzando i giovanotti) Avanti giovanotti! La mano della Wally è una cuccagna! ▼HAGENBACH▲ (con disprezzo) No! Una moglie così non la vorrei! Colei non per l amor per l odio è fata! ▼ALCUNI GIOVANOTTI▲ (scimiotteggiando Hagenbach) No! Una moglie così non la vorrei! ▼ALTRI GIOVANOTTI▲ No! Una moglie così non la vorrei! ▼IL PEDONE▲ (malizioso, rimbeccandoli) L ho udita dire e ridir Che nessun uomo un bacio sapria torle … ▼GIOVANOTTI▲ Oh! l orgogliosa! ▼HAGENBACH▲ (con fatuità) Vuo rivederla e vuo con lei danzar! (Intanto le vecchie e le fanciulle sono entrate in chiesa. Gli uomini, tornati a sedersi alle tavole dell osteria, bevono e giuocano.) ▼AFRA▲ (facendo vicina all Hagenbach con voce carezzevole) No! Coll amor tu non dêi scherzar. Chè invan resiste al suo voler il cor! E il pianto a ogni pupilla ei sa strappar. No, tu non dêi scherzar coll amor! ▼IL PEDONE▲ (facendo della filosofia) Ai giovanotti piace lo scherzar! ▼WALTER▲ (che è ritornato, udendo parlare della Wally, esclama in atto di sfida ) Nessuna saprà la Wally far piegar. ▼AFRA▲ No! Coll amor, no, tu non dêi scherzar. ▼IL PEDONE▲ Badate, ohimè! che assai scaltro è amor! ▼HAGENBACH▲ Ah! Rider mi fate! ▼WALTER▲ Essa ha vaghezza solo di scherzar! ▼AFRA▲ No! Coll amor tu non dêi scherzar! ▼HAGENBACH▲ Io tremar? Io tremar? È troppo fermo il cor. ▼IL PEDONE▲ Ai giovanotti piace lo scherzar! ▼HAGENBACH▲ È troppo fermo entro il mio petto il cor! ▼WALTER▲ Ah! ah! ah! ▼AFRA▲ No, no, no. ▼IL PEDONE▲ Ah! ah! ah! ▼WALTER▲ Essa ha vaghezza solo di scherzar Ma alle malie d amor chiuso è il suo cuore! Nessun saprà la Wally far piegar. No! Coll amor non dêi scherzar! Ah! ah! ah! ah! Essa ha vaghezza solo di celar! ▼AFRA▲ No! Coll amor non dêi scherzare, ecc ▼HAGENBACH▲ Colle orgogliose piacemi scherzar Ma il core ho chiuso alle malie d amor! Ah! Rider mi fate! Io tremar? È troppo fermo entro al mio petto il cor! ▼IL PEDONE▲ Se alle donna la testa fa girar, L uomo s inebria di furore! Badate, ohimè! che scaltro è amor! ▼GIOVANOTTI▲ Ah! ah! ah! ah! ▼HAGENBACH▲ Ah! ah! rider mi fate! ▼WALTER, AFRA E IL PEDONE▲ No! Coll amor tu non dêi scherzar, Che invan resiste al suo voler il cor! E il pianto, a ogni pupilla sa strappar. No, tu non dêi scherzar coll amor! (ridendo) Ah! ah! ah! ▼HAGENBACH▲ Io tremar? io tremar! (ridendo) Ah! ah! ah! ▼WALTER, AFRA E IL PEDONE▲ (vedendo giungere la Wally) Eccola quà! (Infatti è la Wally! A questo grido di sorpresa ne segue un altro di ammirazione.) ▼GIOVANOTTI▲ (mormorando) La bella creatura! ▼AFRA▲ (all Hagenbach che studiatamente non si volge a guardare) E che arie da regina … E che bel vezzo di perla al collo! (La Wally è superbamente bella e superbamente vestita di una ricca veste di velluto, ed ha uno splendido vezzo di perle al collo. Alcune amiche l accompagnano.) ▼WALTER▲ (movendo incontro a Wally) Alfin sei giunta! ▼WALLY▲ (a Walter) Sei tu, mio Walter? ▼GIOVANOTTI▲ (alzandosi) Benvenuta, Wally, se per danzar tu vieni … ▼ALCUNI▲ Di! Danzerai con me? ▼ALTRI▲ Poi con me pur? ▼WALLY▲ (interrompendoli) E perchè no? (Ad un suo cenno, Afra si toglie dall Hagenbach e rientra portando una tazza alla Wally, poi ritorna presso a Giuseppe. La Wally la segue coll occhio, si avvede della presenza dell Hagenbach e depone senza bere la tazza.) Io danzerò con chi vorrà il capriccio Pel piacer di danzar! ▼IL PEDONE▲ (intervenendo) Anche la danza del bacio? ▼WALLY▲ (provocante) Lo so che le fanciulle vostre Nascondon la voglia che han di baci Nell uso di tal danza! Io, no! … E poi … ▼IL PEDONE▲ E poi? ▼WALLY▲ Non facil cosa saria forse Strapparmi un solo bacio! ▼IL PEDONE▲ (insistente) E se ciò fosse? ▼WALLY▲ Finor non m han baciata Che i rai del sol e il vento, La rugiada imperlata, Le stelle in firmamento; M ebbi il bacio del fiore; M ebbi il bacio del prato; Della neve il candor Il bacio suo m ha dato; Mi dier baci coll ali augelli del Signore … Solo baci immortali la Wally ebbe finor. (Accesa nel volto e negli occhi, rimane come assorta; poi, a un tratto, la sua fronte candida si abbuia. Il suo sguardo corre ad Afra e Giuseppe! Parlano … non si curano di lei. Un lampo vibra nella sua pupilla, ed è quasi in atto di sfida che ai giovanotti lancia queste parole così piene di disprezzo.) Così prezioso don qual uomo mai potria rubarsi? ▼IL PEDONE▲ E se alcuno il potesse? ▼WALLY▲ Quell uom? … Quell uom? Sarebbe mio! (Prende il braccio di Walter e si allontana. Passando vicino all Hagenbach, lo guarda prima con civitteria, poi con uno sguardo profondo così che egli è scosso.) ▼IL PEDONE▲ (con ironia) Su! giovanotti! Il bacio di Wally val la cuccagna! ▼GIOVANOTTI▲ (dalle porte aperte della chiesa si ode la lenta armonia dell organo) È l ora della messa! In chiesa andiam … andiam … Poscia alla danza e rivedrem! (I giovanotti s avviano tutti lentamente alla chiesa. Afra rientra nell osteria.) ▼HAGENBACH▲ (alzando tutto turbato, e avviandosi egli pure in chiesa, fra sè) Ancora qual suo sguardo! (Walter e la Wally che si è attardata colle sue amiche per acconciarsi il velo, stanno pure per entrarvi, quando da una viuzza di destra sbuca fuori Gellner il quale impedisce loro il passo. Wally si ferma, fa segno a Walter di voler rimaner sola.) ▼DONNE▲ (internamente dalla chiesa) Santa Maria ora pro nobis. ▼WALLY▲ (freddamente rivolgendosi Gellner) Sei tu?! ▼GELLNER▲ Son io … ▼WALLY▲ Da che son la padrona Tu sol, dei miei, non sei venuto a me … ▼GELLNER▲ Io non l osai … ▼WALLY▲ Non t ho dimenticata! Un dì tu fosti sordo ai preghi miei E fui per te cacciata … Orben, oggi io te caccio! Però … ingrata esser non vuo … (Gli stende una borsa di denaro.) Prendi! … È denaro! E vanne! ▼GELLNER▲ Nulla voglio da te … (con un gesto allontana la borsa che Wally gli porge, e poi risoluto) Io t amo ancora e più di prima io t amo! Deh! … mi guarda com io per te mi struggo … ▼WALLY▲ (ridendo) Ah! ah! ah! ▼GELLNER▲ In desiderii … ▼WALLY▲ Ah! ah! ah! (torturandolo femminilmente) Cantava un dì mia nonna questa strana canzon "Fatto il mondo è così Non v ha più fiera voluttà d amor Che odiare l uom che v ha donnato il cor. Piangi, garzon? E tu bel Cavalier, Ah! ah! ah! perchè si triste e cupo è il tuo pensier? (beffardamente) Nerianna si rifiuta alla tua brama Ti deride, se soffri, la tua Dama? Ah! ah! ah! Fatto il mondo è così Amor al riso sempre il pianto unì!" ▼GELLNER▲ (cogli occhi pieni di lacrime e la voce piena di preghiere) Non rider! ▼WALLY▲ (ride provocandolo) Oggi sono allegra assai! ▼GELLNER▲ (fissandola in viso) Non è ver! ▼WALLY▲ (tornando seria e turbata) Che ne sai tu? ▼GELLNER▲ Rispondi … Perchè, così selvaggia un dì, Ti adorni ora di perle E per le fiere corri! Dietro all amor tu corri … ▼WALLY▲ (interrompendolo impetuosa) Non è ver! ▼GELLNER▲ (implacabile, investendola) Menti!! Il tuo cor per me non ha secreti … (Le si avvicina, ed abbassando la voce sussurra ) Sai tu perchè ti ottendi da tuo padre? Perchè gli dissi che Giuseppe amavi! ▼WALLY▲ (con impeto selvaggio e feroce, come una imprecazione) Ed è per me un ebbrezza il tormentarti! ▼GELLNER▲ Mi fai pietà! (la sua voce è grave eppur dolce) Se tu, Wally, sapessi dimenticare! Ah … viver felici! (interrompe il discorso, e con immenso slancio) Schiavo de tuoi begli occhi Ai piedi ti starei E, pregando a ginocchi, Come s adora in ciel, t adorerei! (si inginocchia baciandole la veste, poscia, con immenso trasporto) E una lunga carezza, E un ebrrezza Inifita Eterna giovinezza Sarà la nostra vita! Wally! Wally! ▼WALLY▲ Sù via … Ti leva! … A che pregar? … Non t amo. È ver. (dopo un momento di silenzio e di riflessione) Giuseppe io amo … ▼GELLNER▲ (levandosi con impeto; fuori di sè) Ah! maledetta! Ma non l avrai! Che già vicino è il dì della sue nozze! (Ride quasi in uno spasimo di ferocia.) ▼WALLY▲ Ah, no! Geller, tu menti! Per torturarmi menti … ▼GELLNER▲ Alla bell Afra chiedilo dunque. (Wally, colpita, impalladisce, le forze a un tratto le mancano e si appoggia barcollando ad una tavola.) Ed or? … Perchè non ridi? … ▼WALLY▲ (angosciata, ripensando) Eran poc anzi là! Stretti a colloquio sorridevan fra loro, E le lor teste si toccavan così … Che (Vergin santa) si saria detto (Un singhiozzo le strozza la voce.) Che scambiasser baci! … ▼GELLNER▲ (ironicamente) Cantava un dì mia nonna questa strana canzon … ▼WALLY▲ Taci … ▼GELLNER▲ "Fatto è il mondo così … (beffardamente) Nerina si rifiuta alla tua brama? … WALLY (minacciando) Ma ancor sue moglie Afra non è … GELLNER Ti deride, se soffri, la tua Dama? Ah! ah! ah! Fatto il mondo è così!" ▼WALLY▲ (con forza) Io l amo, io l amo! E nessun può legger nel destin. (È fuori di sè acciecata, pazza, batte sulla tavola dove sta ancora la tazza che Afra le aveva portata. Afra accorre. La Wally è così agitata che non si avvede che già dalla chiesa esce la gente e che la piazza ritorna piena di voce e di moto.) ▼AFRA▲ Che brami, Wally? ▼WALLY▲ (afferrando la tazza la getta violentamente contro terra così imbrattarle la vesta e grida ) Invero che tal broda soli I tuoi ganzi posson trangugiar! ▼AFRA▲ (prorompe in lagrime) Ahimè! Ahimè! ▼WALTER E CORO▲ (circondando Afra e Wally) Che avvenne, Wally? ▼WALLY▲ Nulla! (ad Afra) Ed or perchè tu piangi? Non temer come s asciughin gli occhi Alle fantasche io so! (leva dalla borsa una moneta, e la lascia cadere ai piedi di Afra, dicendole ) Toh! … Ridi! ▼HAGENBACH▲ (che ha veduto, non visto, questa scena, si avanza lentamente, si avvicina ad Afra, si abbrassa e raccoglie la moneta d ora e la getta ai suonatori girovaghi) È la ricca padrona dell Hochstoff che vi paga … Or sù! Un ländler dei più gai! ▼CORO▲ Evviva! evviva! ▼WALLY▲ (fra sè) (Povera me … Vincenzo ha detto il vero!) ▼HAGENBACH▲ (ad Afra consolandola) Non pianger, Afra … Ti vendicherò! ▼CORO▲ (all Hagenbach) Vieni a danzar … ▼HAGENBACH▲ (ai giovanotti) Sì … Danziam … Ma pria vò fare una scommessa … ▼CORO▲ E qual? Sentiam! ▼HAGENBACH▲ Dieci fiorini d oro Che alla Wally un bacio strapperò! ▼CORO▲ (ridendo) Scommessa strana! ▼HAGENBACH▲ Ebben? ▼CORO▲ Sia pur! Teniamo! (La piazza, in un batter d occhi, si è mutata quasi in una immensa sala da ballo. Le tavole riunite servono da palco pei suonatori. Sulle panche, disposte a collana, seggono i vecchi, le vecchie, i borghesi. Le fanciulle prendono il braccio del giovanotto che le invita. L Hagenbach, levatosi il cappello, ne toglie la penna d acqualia e ve la rimette, ma al rovescio, il che significa nei costumi di Sölden che qualunque giuramento, qualunque promessa, qualunque parola, se la penna è al rovescio non ha valore. Nessuno se n è accorto, eccettuato Gellner che, confusa nella folla, presso al palco dei suonatori, non ha mai staccato lo sguardo dall Hagenbach.) ▼GELLNER▲ (vedendo l Hagenbach attraversare la piazza alla volta della Wally, si avvicina a lei rapidamente, sussurandole all orecchio ) Bada, Wally! (Si allontana.) ▼HAGENBACH▲ (con galanteria) Danzar con te da tempo desiavo … ▼WALLY▲ (lusingata) Se dici il ver! ▼HAGENBACH▲ (come se giurasse) È il ver! ▼WALLY▲ (guardando dubbiosa) Pure i tuoi occhi han certi strani sguardi! (con tristezza) L ingannarmi saria crudel … ▼HAGENBACH▲ (trascinando dolcemente la Wally) Danziam! (Commincia il ländler. Anche il Pedone e Walter danzano.) ▼CORO▲ Già il canto fervido vola per l aere; Come di rondin, leggiero ha il vol, E i trilli modula, dell usignol. Agili, rapide, le corde fremono … I fiori olezzano Fremon nell aure, inni d amor. (La lotta del bacio ferve ancora accanta nel fondo. Ad un bacio côlto, risa, applausi. Risate lunghe accolgono la vittoria di Walter. Ogni bacio dato è una coppia di danzatori che scema. Ormai pochissime continuano. Ma l attenzione del Pedone e dei giovanotti che hanno udita la scommessa è per l Hagenbach e la Wally, attenzione stuzzicata dai due pel loro contegno. Si direbbe che danzino senza accorgersene e spesso cessano di danzare per parlarsi, qualsichè l armonia che li conduce non sia già quella degli instrumenti, ma quelle che esce dalle loro labbra.) ▼HAGENBACH▲ (ad un tratto eccitato da alcune parole della Wally, cessa di danzare, e turbato le dice ) No! Parla! Vuò saper! Dicevi? ▼WALLY▲ (continuando il discorso quasi suo malgrado) Posar sovra il tuo petto … Scordar il mondo e Dio … Sempre al tuo cor vicina … Questo era il sogno mio … ▼HAGENBACH▲ (sorpreso e commosso) Ed io nel tuo cuor, fanciulla, Sempre ho creduto il nulla! ▼WALLY▲ (continuando) Ma un giorno m hanno detto Ch ero odiata da te … ▼HAGENBACH▲ (turbato, con calore, interrompendola) Non t ho odiata mai … Lo giuro … Credi a me! (Riprendo la danza.) ▼IL PEDONE▲ Arte è malva già, Il bacio aescar colla parola. ▼VECCHIE▲ No, non è ver! ▼GIOVANOTTI▲ Al dolce giuoco vincer dee la danza sola! ▼HAGENBACH▲ (ad un tratto si arresta nuovamente; questa volta egli cerca di scioglersi dalle braccia della Wally; è pallidissimo, con stanchezza) No! Non vuò più danzar! ▼WALLY▲ (trattendolo e continuando a parlargli, scherzosa, eccitandolo ) Al mio labbro di rosa Non giunge il labbro timido di bocca paurosa … ▼HAGENBACH▲ (ancora più turbato e tremante) Cessiam! Da te son vinto! ▼WALLY▲ Ah! ah! ah! Perchè allor, m hai sfidata? (Il ländler si è fatto affannoso; nel fondo della scena si danza ancora.) ▼HAGENBACH▲ (con impeto, stringendosi alla Wally) Perchè? … Perchè domandi? … ▼IL PEDONE▲ (ai giovanotti) Attenti! S avvicina il momento! ▼HAGENBACH▲ Perchè Wally sei bella … ▼VECCHIE▲ Diritto d ognun è la favella! ▼GIOVANOTTI▲ Non è ver! ▼HAGENBACH▲ Perchè hai profondi sguardi … Soave la favella … ▼VECCHIE▲ È l arma più cortese che fa la lotta bella! ▼FANCIULLE▲ (nel fondo) Sì, danziam! ▼HAGENBACH▲ Nei candidi tuoi denti v è una malia ascosa … V è la vita e l amor sul tuo labbro di rosa! ▼IL PEDONE▲ Attenti! Attenti! ▼HAGENBACH▲ In nodo fereo l anima allaccia … ▼FANCIULLE▲ Agili, rapide, le corde fremon. ▼HAGENBACH▲ Questa tua chioma morbida, Che a te stretto mi abbraccia! (A questo punto il Pedone si stacca dal gruppo dei giovanotti che si interessano alla lotta fra l Hagenbach e la Wally, e portandosi nel fondo stuzzica anche la curiosità delle donne narrando loro la scommessa. A poco a poco tutto si avvicinano ai due amanti circondandoli.) ▼WALLY▲ Ah! taci! taci! Udir più non ti vo … Tu menti! tu menti! ▼HAGENBACH▲ (arrestandosi bruscamente, colle lagrime agli occhi) Lo giuro! ▼WALLY▲ (con impeto) Non giurar! ▼HAGENBACH▲ Credimi è il ver! … ▼WALLY▲ (livida in viso) No, ad altra fanciulla il tuo amore hai giurato … ▼HAGENBACH▲ Ah, tu, da un ora, con tormenti d inferno Ah, Wally, mi torturi! m uccidi! Di me tu prendi scherno! Wally! Wally! ▼WALLY▲ (colle lagrime agli occhi) Scherno di te? Non vedi che t amo e in te rapita Vivo una nuova vita … ▼HAGENBACH▲ (affascinato, tremante) Ma allor … perchè mi nieghi d un bacio tuo l ebbrezza? ▼WALLY▲ (con un lamento) Ohimè! ▼HAGENBACH▲ (abbracciandola con violenza) Così! Così ti voglio! Ah! sempre mia! ▼WALLY▲ (con un sospiro si abbandona a lui) Prendimi! (L Hagenbach la bacia sulla bocca. Un urlo confuso di applausi, di gride beffarde, di risa scoppiano come un uragano intorno.) ▼IL PEDONE, DONNE, GIOVANOTTI E BORGHESI▲ Ah! ah! ah! La Wally fu baciata! Ed Afra è vendicata! (I giovanotti circondano l Hagenbach, che li guarda come trasognato, ricordando la scommessa.) ▼WALLY▲ (scossa a quelle risa, guarda l Hagenbach, non comprendendo) Che dicon mai costoro? E perchè ridon? (I giovanotti trascinano l Hagenbach verso l osteria.) ▼GELLNER▲ (avvicinandosi alla Wally) Disgraziata! Perchè non m hai creduto? ▼WALLY▲ Crudel vendetta! Ei m ingannò! ▼GIOVANOTTI▲ A ber! ▼IL PEDONE▲ A ber! ▼GIOVANOTTI▲ Afra, il miglior tuo vino! (La Wally, gli occhi vitrei, livida, senza lacrime, guarda avanti a sè. Gellner e Walter la circondano; ma ella non vede che uno. Un uomo che le volge le spalle. Quasi spera ancora! Ed ecco invece le vecchie, le fanciulle, tutte le donne di Sölden che la attorniano, beffarde, sogghignando.) ▼DONNE DI SÖLDEN▲ Se un marito torrai, Tu pure a lui Wally Un bacio porterai, Ah! ah! ah! Che Dio non beredì! Ah! ah! ah! (Gellner e Walter circondano la Wally.) ▼GELLNER▲ Sù! Vieni! Andiam! (additandogli l Hagenbach che cerca di stordirsi bevendo) Guardarlo là! Lo vedi? ▼IL PEDONE▲ (toccando la sua colla tazza dell Hagenbach) Non v è maggior piacer D un ben colmo bicchier. Ah sì! credete a me, (vuotando la tazza) Altro non v è! Evviva l Hagenbach! ▼GIOVANOTTI▲ Viva! ▼WALLY▲ (cogli occhi fissi sull Hagenbach, afferra Gellner e gli dice) Dì … Mi vuoi tu ancora? ▼GELLNER▲ (con slancio) Sempre! ▼WALLY▲ (sempre cogli occhi sull Hagenbach e con voce ferma) Io lo vo morto! ATTO SECONDO Il paesaggio la piazza di SöldenNel fondo la chiesa alla quale si accede per un ampia gradinata. Da una parte all altra, traversalmente corrono striscie di tela colorata che ricoprono la piazza in parte (la parte riservata alle danze pubbliche). L osteria dell Aquila è a destra. Le finestre, la porta, le tavole, le panche, tutto vi è coperto ed ornato di rami frondosi e di fiori. Anche dalle finistre e dai ballatoi pendono drappi a colori, fronde, ghirlande. È tutto un paese vestito di festa! È il Corpus Domini.La piazza è gremita di gente; chi va e chi viene; chi si dà al discorrere; chi saluta e passa; chi ride; chi si trattiene a crocchi. Tutti i variopinti e pittoreschi costumi del Tirolo vivono e si muovono nella piccola piazza.Ecco là, il Pendore di Schnals già seduto davanti ad una enorme tazza di birra, in mezzo a un crocchio di giovanotti, che beve, ride, discute e qualche volta alla bell Alfra tutta in faccende (la padrone dell osteria dell Aquila) mormora parole che eccitano la facile allegria dei suoi ascoltatori! Là, in disparte, c è anche Gellner, anch egli vestito a festa, ma triste, sinistro, taciturno. Come egli è cambiato in un anno! (poichè è passato già l anno dalla sera che all Hochstoff, fu respinto dalla Wally e costei del padre messa alla porta. ALCUNE FANCIULLE attraversando la piazza e susurrano fra loro Entro la folla che intorno s aggira, Nei dì di festa, è bello passegiar. ALTRE FANCIULLE si succedono gaiamente ridendo Là v è garzon che per me sospira! TUTTE LE FANCIULLE additando Là ve n è un altro che mi sta a guardar! Al passare delle fanciulle avanti alla tavola dove siede, beve, sogghigna e fuma il pedone di Schnals. TENORI osservando S io mi dovessi ora ammogliar, Di queste mogli non ne vorrei! Son volubili troppo nell amar E una fraschetta in casa non torrei! VECCHIE attraversano la piazza e si avviano alla chiesa, soggurdano brontolando le belle ragazze Già le campane suonano … E le preghiere echeggiano … Esse Dio non ascoltano … Ma ridono e cinguettano … Ed a mill altro pensano Che al piacer, le frivole … Ed alle vesti e ai bindoli, Che intorno a lor svolazzano! BORGHESI sorridendo malignamente O nonne saggie e venerate, Perchè con tanta furia Alla chiesa ne andate? Tanti anni son passati, Che le colpe di vostra gioventù Lo stesso Iddio non ricorda più! ALCUNE FANCIULLE Là v è un garzon che per me sospira! ALTRE FANCIULLE Là v è un altro che mi sta a guardar! TENORI S io mi dovessi ora ammogliar, Di queste moglie, affè! non prenderei! TUTTI Suona la squilla mattutina! È il dì di festa! Le vecchie frettolose si avviano alla chiesa. IL PEDONE fumando in una lunga pipa di porcellana e rivolgendosi ai vicini Or, per la via, ne ho incontrate assai Brigate allegre e giovinette belle! TUTTI Suona la squilla mattutina! È il dì di festa! UOMINI alzandosi Giorno è per noi di festa e d allegria! IL PEDONE a un tratto si leva, guarda per la piazza e addita Walter che tutto in fronzoli se ne viene occhieggiando, curioso e un po spavaldo, le donne Vedetelo venir il piccol Walter Tutto vestito a festa. UOMINI beffardi Oh! Il piccol seduttor! VECCHIE E FANCIULLE scontrandosi con Walter mentre s avviano alla chiesa Oh! Il bel corsetto! IL PEDONE ironico a Walter O che già fate l occhietto moribondo a maritate? WALTER stizzito al Pedone Ognun fa quel che gli piace! A voi il ber? A me le belle donne e amar! IL PEDONE Ah! ah! Or or la tua padrona m ho incontrata Che alla festa ne vien … WALTER punto Non ho padrone! IL PEDONE sogghignando Eh, via! Vo dir, colei che così ricche vesti ti diè! WALTER furiente La Wally è sol mia amica! S allontana. Intanto Hagenbach si è seduto ad una tavola avanti all osteria dell Aquila. Afra accorre sorridente, felice. Tutto si fanno intorno all Hagenbach; chi gli stringe la mano, chi lo saluta, chi beve con lui. GIOVANOTTI continuando il discorso col Pedone Avrem la Wally? IL PEDONE Sì; con mistero Ora che al diavol N è andato il vecchio Stromminger, Essa corre le feste e si diverte! GELLNER lanciando un occhiata sinitra all Hagenbach (La sciagurata! qui ne vien per lui!) Gli sfugge un gesto di minaccia, poi a tratto si leva e si perde nella folla. IL PEDONE continua, aizzando i giovanotti Avanti giovanotti! La mano della Wally è una cuccagna! HAGENBACH con disprezzo No! Una moglie così non la vorrei! Colei non per l amor per l odio è fata! ALCUNI GIOVANOTTI scimiotteggiando Hagenbach No! Una moglie così non la vorrei! ALTRI GIOVANOTTI No! Una moglie così non la vorrei! IL PEDONE malizioso, rimbeccandoli L ho udita dire e ridir Che nessun uomo un bacio sapria torle … GIOVANOTTI Oh! l orgogliosa! HAGENBACH con fatuità Vuo rivederla e vuo con lei danzar! Intanto le vecchie e le fanciulle sono entrate in chiesa. Gli uomini, tornati a sedersi alle tavole dell osteria, bevono e giuocano. AFRA facendo vicina all Hagenbach con voce carezzevole No! Coll amor tu non dêi scherzar. Chè invan resiste al suo voler il cor! E il pianto a ogni pupilla ei sa strappar. No, tu non dêi scherzar coll amor! IL PEDONE facendo della filosofia Ai giovanotti piace lo scherzar! WALTER che è ritornato, udendo parlare della Wally, esclama in atto di sfida Nessuna saprà la Wally far piegar. AFRA No! Coll amor, no, tu non dêi scherzar. IL PEDONE Badate, ohimè! che assai scaltro è amor! HAGENBACH Ah! Rider mi fate! WALTER Essa ha vaghezza solo di scherzar! AFRA No! Coll amor tu non dêi scherzar! HAGENBACH Io tremar? Io tremar? È troppo fermo il cor. IL PEDONE Ai giovanotti piace lo scherzar! HAGENBACH È troppo fermo entro il mio petto il cor! WALTER Ah! ah! ah! AFRA No, no, no. IL PEDONE Ah! ah! ah! WALTER Essa ha vaghezza solo di scherzar Ma alle malie d amor chiuso è il suo cuore! Nessun saprà la Wally far piegar. No! Coll amor non dêi scherzar! Ah! ah! ah! ah! Essa ha vaghezza solo di celar! AFRA No! Coll amor non dêi scherzare, ecc HAGENBACH Colle orgogliose piacemi scherzar Ma il core ho chiuso alle malie d amor! Ah! Rider mi fate! Io tremar? È troppo fermo entro al mio petto il cor! IL PEDONE Se alle donna la testa fa girar, L uomo s inebria di furore! Badate, ohimè! che scaltro è amor! GIOVANOTTI Ah! ah! ah! ah! HAGENBACH Ah! ah! rider mi fate! WALTER, AFRA E IL PEDONE No! Coll amor tu non dêi scherzar, Che invan resiste al suo voler il cor! E il pianto, a ogni pupilla sa strappar. No, tu non dêi scherzar coll amor! ridendo Ah! ah! ah! HAGENBACH Io tremar? io tremar! ridendo Ah! ah! ah! WALTER, AFRA E IL PEDONE vedendo giungere la Wally Eccola quà! Infatti è la Wally! A questo grido di sorpresa ne segue un altro di ammirazione. GIOVANOTTI mormorando La bella creatura! AFRA all Hagenbach che studiatamente non si volge a guardare E che arie da regina … E che bel vezzo di perla al collo! La Wally è superbamente bella e superbamente vestita di una ricca veste di velluto, ed ha uno splendido vezzo di perle al collo. Alcune amiche l accompagnano. WALTER movendo incontro a Wally Alfin sei giunta! WALLY a Walter Sei tu, mio Walter? GIOVANOTTI alzandosi Benvenuta, Wally, se per danzar tu vieni … ALCUNI Di! Danzerai con me? ALTRI Poi con me pur? WALLY interrompendoli E perchè no? Ad un suo cenno, Afra si toglie dall Hagenbach e rientra portando una tazza alla Wally, poi ritorna presso a Giuseppe. La Wally la segue coll occhio, si avvede della presenza dell Hagenbach e depone senza bere la tazza. Io danzerò con chi vorrà il capriccio Pel piacer di danzar! IL PEDONE intervenendo Anche la danza del bacio? WALLY provocante Lo so che le fanciulle vostre Nascondon la voglia che han di baci Nell uso di tal danza! Io, no! … E poi … IL PEDONE E poi? WALLY Non facil cosa saria forse Strapparmi un solo bacio! IL PEDONE insistente E se ciò fosse? WALLY Finor non m han baciata Che i rai del sol e il vento, La rugiada imperlata, Le stelle in firmamento; M ebbi il bacio del fiore; M ebbi il bacio del prato; Della neve il candor Il bacio suo m ha dato; Mi dier baci coll ali augelli del Signore … Solo baci immortali la Wally ebbe finor. Accesa nel volto e negli occhi, rimane come assorta; poi, a un tratto, la sua fronte candida si abbuia. Il suo sguardo corre ad Afra e Giuseppe! Parlano … non si curano di lei. Un lampo vibra nella sua pupilla, ed è quasi in atto di sfida che ai giovanotti lancia queste parole così piene di disprezzo. Così prezioso don qual uomo mai potria rubarsi? IL PEDONE E se alcuno il potesse? WALLY Quell uom? … Quell uom? Sarebbe mio! Prende il braccio di Walter e si allontana. Passando vicino all Hagenbach, lo guarda prima con civitteria, poi con uno sguardo profondo così che egli è scosso. IL PEDONE con ironia Su! giovanotti! Il bacio di Wally val la cuccagna! GIOVANOTTI dalle porte aperte della chiesa si ode la lenta armonia dell organo È l ora della messa! In chiesa andiam … andiam … Poscia alla danza e rivedrem! I giovanotti s avviano tutti lentamente alla chiesa. Afra rientra nell osteria. HAGENBACH alzando tutto turbato, e avviandosi egli pure in chiesa, fra sè Ancora qual suo sguardo! Walter e la Wally che si è attardata colle sue amiche per acconciarsi il velo, stanno pure per entrarvi, quando da una viuzza di destra sbuca fuori Gellner il quale impedisce loro il passo. Wally si ferma, fa segno a Walter di voler rimaner sola. DONNE internamente dalla chiesa Santa Maria ora pro nobis. WALLY freddamente rivolgendosi Gellner Sei tu?! GELLNER Son io … WALLY Da che son la padrona Tu sol, dei miei, non sei venuto a me … GELLNER Io non l osai … WALLY Non t ho dimenticata! Un dì tu fosti sordo ai preghi miei E fui per te cacciata … Orben, oggi io te caccio! Però … ingrata esser non vuo … Gli stende una borsa di denaro. Prendi! … È denaro! E vanne! GELLNER Nulla voglio da te … con un gesto allontana la borsa che Wally gli porge, e poi risoluto Io t amo ancora e più di prima io t amo! Deh! … mi guarda com io per te mi struggo … WALLY ridendo Ah! ah! ah! GELLNER In desiderii … WALLY Ah! ah! ah! torturandolo femminilmente Cantava un dì mia nonna questa strana canzon "Fatto il mondo è così Non v ha più fiera voluttà d amor Che odiare l uom che v ha donnato il cor. Piangi, garzon? E tu bel Cavalier, Ah! ah! ah! perchè si triste e cupo è il tuo pensier? beffardamente Nerianna si rifiuta alla tua brama Ti deride, se soffri, la tua Dama? Ah! ah! ah! Fatto il mondo è così Amor al riso sempre il pianto unì!" GELLNER cogli occhi pieni di lacrime e la voce piena di preghiere Non rider! WALLY ride provocandolo Oggi sono allegra assai! GELLNER fissandola in viso Non è ver! WALLY tornando seria e turbata Che ne sai tu? GELLNER Rispondi … Perchè, così selvaggia un dì, Ti adorni ora di perle E per le fiere corri! Dietro all amor tu corri … WALLY interrompendolo impetuosa Non è ver! GELLNER implacabile, investendola Menti!! Il tuo cor per me non ha secreti … Le si avvicina, ed abbassando la voce sussurra Sai tu perchè ti ottendi da tuo padre? Perchè gli dissi che Giuseppe amavi! WALLY con impeto selvaggio e feroce, come una imprecazione Ed è per me un ebbrezza il tormentarti! GELLNER Mi fai pietà! la sua voce è grave eppur dolce Se tu, Wally, sapessi dimenticare! Ah … viver felici! interrompe il discorso, e con immenso slancio Schiavo de tuoi begli occhi Ai piedi ti starei E, pregando a ginocchi, Come s adora in ciel, t adorerei! si inginocchia baciandole la veste, poscia, con immenso trasporto E una lunga carezza, E un ebrrezza Inifita Eterna giovinezza Sarà la nostra vita! Wally! Wally! WALLY Sù via … Ti leva! … A che pregar? … Non t amo. È ver. dopo un momento di silenzio e di riflessione Giuseppe io amo … GELLNER levandosi con impeto; fuori di sè Ah! maledetta! Ma non l avrai! Che già vicino è il dì della sue nozze! Ride quasi in uno spasimo di ferocia. WALLY Ah, no! Geller, tu menti! Per torturarmi menti … GELLNER Alla bell Afra chiedilo dunque. Wally, colpita, impalladisce, le forze a un tratto le mancano e si appoggia barcollando ad una tavola. Ed or? … Perchè non ridi? … WALLY angosciata, ripensando Eran poc anzi là! Stretti a colloquio sorridevan fra loro, E le lor teste si toccavan così … Che (Vergin santa) si saria detto Un singhiozzo le strozza la voce. Che scambiasser baci! … GELLNER ironicamente Cantava un dì mia nonna questa strana canzon … WALLY Taci … GELLNER "Fatto è il mondo così … beffardamente Nerina si rifiuta alla tua brama? … WALLY minacciando Ma ancor sue moglie Afra non è … GELLNER Ti deride, se soffri, la tua Dama? Ah! ah! ah! Fatto il mondo è così!" WALLY con forza Io l amo, io l amo! E nessun può legger nel destin. È fuori di sè acciecata, pazza, batte sulla tavola dove sta ancora la tazza che Afra le aveva portata. Afra accorre. La Wally è così agitata che non si avvede che già dalla chiesa esce la gente e che la piazza ritorna piena di voce e di moto. AFRA Che brami, Wally? WALLY afferrando la tazza la getta violentamente contro terra così imbrattarle la vesta e grida Invero che tal broda soli I tuoi ganzi posson trangugiar! AFRA prorompe in lagrime Ahimè! Ahimè! WALTER E CORO circondando Afra e Wally Che avvenne, Wally? WALLY Nulla! ad Afra Ed or perchè tu piangi? Non temer come s asciughin gli occhi Alle fantasche io so! leva dalla borsa una moneta, e la lascia cadere ai piedi di Afra, dicendole Toh! … Ridi! HAGENBACH che ha veduto, non visto, questa scena, si avanza lentamente, si avvicina ad Afra, si abbrassa e raccoglie la moneta d ora e la getta ai suonatori girovaghi È la ricca padrona dell Hochstoff che vi paga … Or sù! Un ländler dei più gai! CORO Evviva! evviva! WALLY fra sè (Povera me … Vincenzo ha detto il vero!) HAGENBACH ad Afra consolandola Non pianger, Afra … Ti vendicherò! CORO all Hagenbach Vieni a danzar … HAGENBACH ai giovanotti Sì … Danziam … Ma pria vò fare una scommessa … CORO E qual? Sentiam! HAGENBACH Dieci fiorini d oro Che alla Wally un bacio strapperò! CORO ridendo Scommessa strana! HAGENBACH Ebben? CORO Sia pur! Teniamo! La piazza, in un batter d occhi, si è mutata quasi in una immensa sala da ballo. Le tavole riunite servono da palco pei suonatori. Sulle panche, disposte a collana, seggono i vecchi, le vecchie, i borghesi. Le fanciulle prendono il braccio del giovanotto che le invita. L Hagenbach, levatosi il cappello, ne toglie la penna d acqualia e ve la rimette, ma al rovescio, il che significa nei costumi di Sölden che qualunque giuramento, qualunque promessa, qualunque parola, se la penna è al rovescio non ha valore. Nessuno se n è accorto, eccettuato Gellner che, confusa nella folla, presso al palco dei suonatori, non ha mai staccato lo sguardo dall Hagenbach. GELLNER vedendo l Hagenbach attraversare la piazza alla volta della Wally, si avvicina a lei rapidamente, sussurandole all orecchio Bada, Wally! Si allontana. HAGENBACH con galanteria Danzar con te da tempo desiavo … WALLY lusingata Se dici il ver! HAGENBACH come se giurasse È il ver! WALLY guardando dubbiosa Pure i tuoi occhi han certi strani sguardi! con tristezza L ingannarmi saria crudel … HAGENBACH trascinando dolcemente la Wally Danziam! Commincia il ländler. Anche il Pedone e Walter danzano. CORO Già il canto fervido vola per l aere; Come di rondin, leggiero ha il vol, E i trilli modula, dell usignol. Agili, rapide, le corde fremono … I fiori olezzano Fremon nell aure, inni d amor. La lotta del bacio ferve ancora accanta nel fondo. Ad un bacio côlto, risa, applausi. Risate lunghe accolgono la vittoria di Walter. Ogni bacio dato è una coppia di danzatori che scema. Ormai pochissime continuano. Ma l attenzione del Pedone e dei giovanotti che hanno udita la scommessa è per l Hagenbach e la Wally, attenzione stuzzicata dai due pel loro contegno. Si direbbe che danzino senza accorgersene e spesso cessano di danzare per parlarsi, qualsichè l armonia che li conduce non sia già quella degli instrumenti, ma quelle che esce dalle loro labbra. HAGENBACH ad un tratto eccitato da alcune parole della Wally, cessa di danzare, e turbato le dice No! Parla! Vuò saper! Dicevi? WALLY continuando il discorso quasi suo malgrado Posar sovra il tuo petto … Scordar il mondo e Dio … Sempre al tuo cor vicina … Questo era il sogno mio … HAGENBACH sorpreso e commosso Ed io nel tuo cuor, fanciulla, Sempre ho creduto il nulla! WALLY continuando Ma un giorno m hanno detto Ch ero odiata da te … HAGENBACH turbato, con calore, interrompendola Non t ho odiata mai … Lo giuro … Credi a me! Riprendo la danza. IL PEDONE Arte è malva già, Il bacio aescar colla parola. VECCHIE No, non è ver! GIOVANOTTI Al dolce giuoco vincer dee la danza sola! HAGENBACH ad un tratto si arresta nuovamente; questa volta egli cerca di scioglersi dalle braccia della Wally; è pallidissimo, con stanchezza No! Non vuò più danzar! WALLY trattendolo e continuando a parlargli, scherzosa, eccitandolo Al mio labbro di rosa Non giunge il labbro timido di bocca paurosa … HAGENBACH ancora più turbato e tremante Cessiam! Da te son vinto! WALLY Ah! ah! ah! Perchè allor, m hai sfidata? Il ländler si è fatto affannoso; nel fondo della scena si danza ancora. HAGENBACH con impeto, stringendosi alla Wally Perchè? … Perchè domandi? … IL PEDONE ai giovanotti Attenti! S avvicina il momento! HAGENBACH Perchè Wally sei bella … VECCHIE Diritto d ognun è la favella! GIOVANOTTI Non è ver! HAGENBACH Perchè hai profondi sguardi … Soave la favella … VECCHIE È l arma più cortese che fa la lotta bella! FANCIULLE nel fondo Sì, danziam! HAGENBACH Nei candidi tuoi denti v è una malia ascosa … V è la vita e l amor sul tuo labbro di rosa! IL PEDONE Attenti! Attenti! HAGENBACH In nodo fereo l anima allaccia … FANCIULLE Agili, rapide, le corde fremon. HAGENBACH Questa tua chioma morbida, Che a te stretto mi abbraccia! A questo punto il Pedone si stacca dal gruppo dei giovanotti che si interessano alla lotta fra l Hagenbach e la Wally, e portandosi nel fondo stuzzica anche la curiosità delle donne narrando loro la scommessa. A poco a poco tutto si avvicinano ai due amanti circondandoli. WALLY Ah! taci! taci! Udir più non ti vo … Tu menti! tu menti! HAGENBACH arrestandosi bruscamente, colle lagrime agli occhi Lo giuro! WALLY con impeto Non giurar! HAGENBACH Credimi è il ver! … WALLY livida in viso No, ad altra fanciulla il tuo amore hai giurato … HAGENBACH Ah, tu, da un ora, con tormenti d inferno Ah, Wally, mi torturi! m uccidi! Di me tu prendi scherno! Wally! Wally! WALLY colle lagrime agli occhi Scherno di te? Non vedi che t amo e in te rapita Vivo una nuova vita … HAGENBACH affascinato, tremante Ma allor … perchè mi nieghi d un bacio tuo l ebbrezza? WALLY con un lamento Ohimè! HAGENBACH abbracciandola con violenza Così! Così ti voglio! Ah! sempre mia! WALLY con un sospiro si abbandona a lui Prendimi! L Hagenbach la bacia sulla bocca. Un urlo confuso di applausi, di gride beffarde, di risa scoppiano come un uragano intorno. IL PEDONE, DONNE, GIOVANOTTI E BORGHESI Ah! ah! ah! La Wally fu baciata! Ed Afra è vendicata! I giovanotti circondano l Hagenbach, che li guarda come trasognato, ricordando la scommessa. WALLY scossa a quelle risa, guarda l Hagenbach, non comprendendo Che dicon mai costoro? E perchè ridon? I giovanotti trascinano l Hagenbach verso l osteria. GELLNER avvicinandosi alla Wally Disgraziata! Perchè non m hai creduto? WALLY Crudel vendetta! Ei m ingannò! GIOVANOTTI A ber! IL PEDONE A ber! GIOVANOTTI Afra, il miglior tuo vino! La Wally, gli occhi vitrei, livida, senza lacrime, guarda avanti a sè. Gellner e Walter la circondano; ma ella non vede che uno. Un uomo che le volge le spalle. Quasi spera ancora! Ed ecco invece le vecchie, le fanciulle, tutte le donne di Sölden che la attorniano, beffarde, sogghignando. DONNE DI SÖLDEN Se un marito torrai, Tu pure a lui Wally Un bacio porterai, Ah! ah! ah! Che Dio non beredì! Ah! ah! ah! Gellner e Walter circondano la Wally. GELLNER Sù! Vieni! Andiam! additandogli l Hagenbach che cerca di stordirsi bevendo Guardarlo là! Lo vedi? IL PEDONE toccando la sua colla tazza dell Hagenbach Non v è maggior piacer D un ben colmo bicchier. Ah sì! credete a me, vuotando la tazza Altro non v è! Evviva l Hagenbach! GIOVANOTTI Viva! WALLY cogli occhi fissi sull Hagenbach, afferra Gellner e gli dice Dì … Mi vuoi tu ancora? GELLNER con slancio Sempre! WALLY sempre cogli occhi sull Hagenbach e con voce ferma Io lo vo morto! Catalani,Alfredo/La Wally/III
https://w.atwiki.jp/socup/pages/114.html
UIWebView ロード NSURL *url = [NSURL URLWithString @"http //www.s-russia.co.jp/catalogue/number/3.html"]; NSURLRequest *req = [[NSURLRequest alloc]initWithURL url]; [self.webView loadRequest req]; [req release]; エンコードとデコード stringByAddingPercentEscapesUsingEncoding stringByReplacingPercentEscapesUsingEncoding エスケープ word = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)word, NULL, CFSTR (";,/? @ =+$#"), kCFStringEncodingUTF8); ネットワーク接続中のくるくる表示 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
https://w.atwiki.jp/keiplus/pages/148.html
Vagrant構築 linux vagrant 本項は書きたての記事です。正確な情報は公式サイト、公式ドキュメント、記載の参照サイトでご確認ください。 目次 + 読む Vagrant構築目次 概要 構築 Vagrantコマンド vagrant pluginインストール vagrantfile詳細設定 Gitの共有(Vagrant(ゲストOS)先とローカルPCでのGit共有化) サンプル エラーシューティング 参考 概要 2010年、Mitchell Hashimoto氏が開発したプロビジョニングツール。MITライセンス。 2007年に米Innotek社(現Oracle社)が開発したVirtualboxを利用してRubyで構築されている。 v3.0に向け実装環境をRubyからGoへ置換え、柔軟性を高める計画がされている。 以前あったVirtualBoxとHyper-Vの同居不具合は、VirtualBox 6.1.4以降は解消している。しかし 同居させるとパフォーマンスが下がる場合もあるので注意が必要。 Download [ Vagrant by HashiCorp ] ( https //www.vagrantup.com/ ) win10 〇 macOS 〇 Linux CentOS,Debian Other ArchLinux Unix Ⅹ version ver release note 2.2.19 2021/11/05 guest/suse Add fallback shutdown for versions without systemd ,provider/virtualbox Validate VirtualBox hostonly network range - 2010/03/08 start release and more, https //w.atwiki.jp/keiplus/pages/220.html VirtualBox プロバイダツールはVirtualBoxを使う。 Hyper-V, Dockerでも利用できると公式にはあるが、当方の経験を踏まえた記事になるのでVirtualBoxを利用している。 VirtualBoxとVagrantの相性は頻繁に問題になることがある。セキュリティ上の問題がないのであれば安定して利用できるバージョンの組合せを優先した方が良い。特に双方最新版がリリースされたときにすぐにバージョンアップすると様々な問題を引き起こす可能性がある。 + 閲覧 ver date platform pkg Ext pack SDK Change 7.0.4 November 18 2022 〇 〇 〇 VMM,GUI,VirtioSCSI,virtio-net,VBoxManager,Main,Guest,3D,Linux GuestAdditions 7.0.2 October 20 2022 macOS Catalina memory corruption,Main,macOS,WinHost,LinuxGuestAdditions 7.0.0 October 10 2022 VM fully encrypted,OCI,GUI,Audio,GuestControl,VBoxManage,macOShost,LinuxGuestAdditions,Device,EFI,Debugging 6.1.40 October 11 2022 GUI,USB,Main,LinuxHost,LinuxGuestAdditions 6.1.38 September 02 2022 GUI,Main,Redording,LinuxHost,LinuxGuestAdditions 6.1.36 July 19 2022 VMM,GUI,NAT,Audio,Recording,VGA,vboximg-mount,SDK,API,WinHost,LinuxHost,LinuxGuestAdditions 6.1.34 March 22 2022 VMM,GUI,EHCI,Storage,NVMe,DevPcBios,virtio-scsi,E1000,VBoxManage,Networking,OVF,SharedClipboard,macosHost,LinuxGuestAdditions,EFI 6.1.32 January 18 2022 VMM,GUI,Audio,E1000,LinuxHost,Guest,SharedClipboard,OS2,Solaris 6.1.30 November 22 2021 VMM,GUI,Host-only networking,DVD,VBoxManage,VBoxHeadless,vboximg-mount,macosHost,Shared Clipboard,LinuxGuestAdditions 6.1.28 October 19 2021 VMM,UI,VMSVGA,Storage,Network,NAT,Audio,API,Host(win,linux) 6.1.26 July 28 2021 6.1.24 July 20 2021 6.1.22 April 29 2021 6.1.20 April 20 2021 6.1.18 January 19 2021 6.1.16 October 16 2020 6.1.14 September 04 2020 6.1.12 July 14 2020 6.1.10 June 05 2020 6.1.8 May 15 2020 6.1.6 April 14 2020 6.1.4 February 19 2020 6.1.2 January 14 2020 6.1.0 December 10 2019 6.0.24 July 14 2020 6.0.0 December 18 2018 5.2.44 July 14 2020 5.2.0 October 17 2017 5.1.38 May 09 2018 5.1.0 July 12 2016 5.0.40 2017/4/28 5.0.0 2015/7/9 4.3.40 2016/8/22 4.3.0 2013/10/15 4.2.36 2015/11/11 4.2.0 2012/9/13 4.1.44 2015/11/11 4.1.0 2011/7/19 4.0.36 2015/11/11 4.0.0 2010/12/22 さらに古い情報 + さらに古いバージョン [ vagrant/CHANGELOG.md at main · hashicorp/vagrant · GitHub ] ( https //github.com/hashicorp/vagrant/blob/main/CHANGELOG.md ) 構築 1 BIOS/UEFI 仮想化機能有効化 IntelCPUの場合は「VirtualizationTechnology」をEnabled AMD CPUの場合は「SVM Mode」をEnabled 2 Virtualboxをインストール virtualboxダウンロード インストーラーを実行して道なりに手順を踏むだけでよい。 3 vagrantをインストール vagrantダウンロード インストーラーを実行して道なりに手順を踏むだけでよい。 ※ vagrant pluginインストール vagrant pluginインストールを参照。 4 vagrant設定 任意の場所にvagrant用フォルダ/ディレクトリを作成 vagrantfileを作成 vagrant イメージを、vagrant cloudを選び vagrantfileを書き換える vagrantfileを作成 vagrant init vagrantfileをテキストエディタで開く vagrantfile変更箇所 Vagrant.configure("2") do |config|config.vm.box = "(box名)" ※ vagrantfile詳細設定 vagrantfile詳細設定を参照。 5 vagrant構築 vagrant up 6 vagrant(ゲストOS)にログイン vagrant ssh (コマンドプロンプトやPowershell等から) 7 ゲストOS ログイン後はLinuxコマンドで操作をするのみ。 ユーザーはvagrantなので、他のユーザーで操作をしたい場合はsudo su- USERNAMEで切り替えるなどをする。 PowerShell等でなくTeratermなどでもログインできるが、その場合は".vagrant/machines/default/virtualbox/private_key"を指定してやる必要がある。 Vagrantコマンド vagrant up vagrant起動 vagrant halt vagrantゲストOSシャットダウン vagrant reload vagrantゲストOS再起動 vagrant reload --provision vagrantゲストOS再起動+再構築 vagrant up --provider docker vagrant+dockerプロバイダ起動 vagrant box remove BOX/NAME 指定したboxを削除 vagrant pluginインストール hostsやsmb(ファイル共有)などを行うための便利ツールがある。 インストール vagrant plugin install (プラグイン名) アンインストール vagrant plugin uninstall (プラグイン名) 一覧取得 vagrant plugin list 一括アップデート vagrant plugin update プラグインの実インストール先は下記。 C \Users\{USERNAME}\.vagrant.d\gems\2.7.4\gems 都合でVagrant本体をアンインストール⇒インストールした場合でも同フォルダは削除されずに残っているので、本当にクリーンインストールを行う場合は、/.vagrant.dを削除してから再インストールを行った方がよい。 プラグイン一覧 vagrant-cachier プロビジョンなどでDL済パッケージをキャッシュ vagrant-global-status 起動済みvagrantを一覧などを行う vagrant-host-shell ホストOS上でコマンドを記述する vagrant-hostmanager ゲストOSとホストOSの/etc/hostsを設定 vagrant-hosts ゲストOSのhosts設定 vagrant-hostsupdater ホストOSの/etc/hostsへゲストOS情報を追加/削除 vagrant-omnibus プロビジョニングにChefを利用できる(※1) vagrant-vbguest ホストOS/ゲストOS間のファイル共有 vagrant-vbox-snapshot スナップショット(※2) docker-provider 【注意】Docker provider for Vagrant vagrant-dns A plugin to manage DNS records for vagrant vagrant-dnsmasq A Dnsmasq Vagrant plugin that manages the dnsmasq.conf file and /etc/resolver directory on your host system. vagrant-niftycloud https //github.com/sakama/vagrant-niftycloud 【注意】現在docker-providerはバグがあるため要注意。 vagrantfile詳細設定 (テンプレート)※修正中 IPや各値は仮のものです。適宜読み替え、変更してください。 パイプ(|)はatwiki編集の都合上「全角」で記載していますが、利用時は「半角」に直してください。 ホスト名の指定 config.vm.hostname Virtualboxのイメージ名の指定 config.vm.provider virtualbox do |vbox|vbox.name = "VirtualboxNAME"end ポートフォワーディング config.vm.network "forwarded_port", guest 22, host 2222 プライベートネットワーク config.vm.network "private_network", ip "192.168.33.10" 共有フォルダ config.vm.synced_folder "./data", "/vagrant_data"※ ホスト側Path, ゲスト側Path プロビジョニング(外部shell) config.vm.provision "shell", path "./shell/init.sh" プロビジョニング(ファイルコピー) config.vm.provision "file", source "./HOSTDIR", destination "/GUESTDIR/."source⇒destinationへファイルコピーする プロビジョニング(インライン) config.vm.provision "shell", inline -SHELL(コマンド)SHELL メモリー設定 config.vm.provider "virtualbox" do |vb|vb.gui = truevb.memory = "1024"end Gitの共有(Vagrant(ゲストOS)先とローカルPCでのGit共有化) ゲストOS ローカルPC 通常ファイル共有ディレクトリ <--> ローカルPCフォルダ Git共有ディレクトリ <--> ローカルPCフォルダ △▽ リポジトリ サンプル https //img.atwiki.jp/keiplus/pub/Vagrantfil https //img.atwiki.jp/keiplus/pub/basic.sh エラーシューティング エラーシューティングにまとめています。 参考 [ 【VirtualBox】VirtualBox 6.1.4にしたらHyper-Vと共存できるようになった件 - Crieit ] ( https //crieit.net/posts/VirtualBox-VirtualBox-6-1-4-Hyper-V )
https://w.atwiki.jp/fxext/pages/22.html
ローカルメソッドと思われる物(最初がアンダーバーで始まるもの)は書き出していない。 tabbrowser - MDC Doc Center gBrowser独自のメソッド isFindBarInitialized(aTab) getFindBar(aTab) getStatusPanel() updateWindowResizers() ウィンドウ右下のリサイズグリップの表示フラグを各browserに設定する。 pinTab(aTab) タブをピン留めする。aTabに"TabPinned"イベントが発行される。 unpinTab(aTab) ピンのピン留めを解除する。aTabに"TabUnpinned"イベントが発行される。 previewTab(aTab, aCallback) getBrowserAtIndex(aIndex) タブインデックスからブラウザーオブジェクトを取得する。 getBrowserIndexForDocument(aDocument) Documentオブジェクトをキーにして、それが所属するブラウザーオブジェクトのインデックスを返す。 getBrowserForDocument(aDocument) Documentオブジェクトをキーにして、それが所属するブラウザーオブジェクトを返す。 _getTabForContentWindow(aWindow) Windowオブジェクトをキーにして、そのウィンドウのタブを返す。 _getTabForBrowser(aBrowser) ブラウザーオブジェクトをキーにして、そのタブを返す。 getNotificationBox(aBrowser) getSidebarContainer(aBrowser) getBrowserContainer(aBrowser) getTabModalPromptBox(aBrowser) mTabProgressListener(aTab, aBrowser, aStartsBlank) setIcon(aTab, aURI) getIcon(aTab) shouldLoadFavIcon(aURI) useDefaultIcon(aTab) isFailedIcon(aURI) getWindowTitleForBrowser(aBrowser) updateTitlebar() updateCurrentBrowser(aForceUpdate) 選択されたタブに従ってCurrentBrowserを切り替える関数。ユーザーがこの関数を直接使うような事は普通はしないだろう。 CurrentTabに"TabSelect"イベントが発行される。 _tabAttrModified(aTab) aTabに"TabAttrModified"イベントを発行するためだけの関数。 setTabTitleLoading(aTab) setTabTitle(aTab) loadOneTab(aURI, aReferrerURI, aCharset, aPostData, aLoadInBackground, aAllowThirdPartyFixup) タブを一つ開く。 引数が2個で、第2引数がそれ以降の引数+αを内包したオブジェクトとなっている方式がFirefox3.6より導入された。引数3個以上は互換性維持のために残してあるだけ。 第2引数のオブジェクトは { referrerURI null, // nsIURIオブジェクト charset UTF-8 , // UTF-8 とか Shift_JIS とか postData null, inBackground false, // バックグラウンドで開く時true allowThirdPartyFixup false, fromExternal false, relatedToCurrent false, // カレントページの隣に開く時true isUTF8 false, // aURIがUTF8かどうか } loadOneTab - MDC Doc Center loadTabs(aURIs, aLoadInBackground, aReplace) 複数のURLによる配列を渡して複数のタブを開く。 addTab(aURI, aReferrerURI, aCharset, aPostData, aOwner, aAllowThirdPartyFixup) タブを一つバックグラウンドで開き、作成されたaTabを返す。aTabには"TabOpen"イベントが発行される。 引数が2個で、第2引数がそれ以降の引数+αを内包したオブジェクトとなっている方式がFirefox3.6より導入された。引数3個以上は互換性維持のために残してあるだけ。 第2引数のオブジェクトは { referrerURI null, // nsIURIオブジェクト charset UTF-8 , // UTF-8 とか Shift_JIS とか postData null, ownerTab null, // 親タブ xul tab allowThirdPartyFixup false, fromExternal false, relatedToCurrent false, // カレントページの隣に開く時true skipAnimation false, isUTF8 false, // aURIがUTF8かどうか } addTab - MDC Doc Center warnAboutClosingTabs(aCloseTabs, aTab) 開いている複数のタブ全てを閉じようとする時に表示される警告ダイアログを出す。 第一引数の aCloseTabs には gBrowser.closingTabsEnum の3つの値のどれかを設定する。 閉じるタブ数が1個以下の時やダイアログ非表示設定の時は自動的に true が返る。それ以外はダイアログ結果によって true/false が返ってくる。 getTabsToTheEndFrom(aTab) 指定したタブより右のタブの配列を取得する。 removeTabsToTheEndFrom(aTab) 指定したタブより右のタブを閉じる。 removeAllTabsBut(aTab) 指定したタブ以外を削除する。 removeCurrentTab(aParams) カレントタブを削除する。removeTab() に mCurrentTab を渡してるだけ。 removeTab(aTab, aParams) タブを削除する。 第2引数のオブジェクトは { animate false, byMouse false, // タブをマウスクリックで削除の場合true。アニメーション処理が変わる(タブバー上にマウスがある限りタブの横幅が変わらない) } swapNewTabWithBrowser(aNewTab, aBrowser) swapBrowsersAndCloseOther(aOurTab, aOtherTab) reloadAllTabs() 全てのタブをリロードする。 reloadTab(aTab) タブをリロード。実体は aTab.linkedBrowser.reload() である。 addProgressListener(aListener) removeProgressListener(aListener) addTabsProgressListener(aListener) removeTabsProgressListener(aListener) getBrowserForTab(aTab) タブからブラウザーオブジェクトを取得する。実体は aTab.linkedBrowser showOnlyTheseTabs(aTab) showTab(aTab) aTabに"TabShow"イベントが発行される。 hideTab(aTab) aTabに"TabHide"イベントが発行される。 selectTabAtIndex(aIndex, aEvent) 指定されたインデックスのタブを選択する。 aEvent はイベントキャンセル(preventDefault と stopPropagation)するために指定するだけ。 replaceTabWithWindow(aTab) タブを新しいウィンドウとして切り離す。 moveTabTo(aTab, aIndex) タブを指定したタブ配列インデックスに移動させる。 moveTabForward() / moveTabBackward() カレントタブをタブ配列の一つ前/後ろへ移動させる。 moveTabToStart() / moveTabToEnd() カレントタブをタブ配列の一番最初/最後へ移動させる。 moveTabOver(aEvent) duplicateTab(aTab) タブを複製する。複製されたタブはタブ配列の一番最後に追加される。 attachFormFill() detachFormFill() createTooltip(event) handleEvent(aEvent) receiveMessage(aMessage) setStripVisibilityTo(aShow) getStripVisibility() mCurrentBrowser にそのままリダイレクトしているメソッド goBack() goForward() reload() reloadWithFlags(aFlags) stop() loadURI(aURI, aReferrerURI, aCharset) loadURIWithFlags(aURI, aFlags, aReferrerURI, aCharset, aPostData) goHome() gotoIndex(aIndex)
https://w.atwiki.jp/nothing/pages/420.html
「俺はこの4年間ほとんどまともにやってないのに・・・何を考えているんだっ。お前は」 胸倉を掴んで、アスランはシンを引き寄せた。 「今がどういう時期か分かっているのか。オリンピックを目指しているのは俺じゃない、お前なんだぞっ」 しかし、シンも負けてはいない。咄嗟に手を振りほどくと、重心低く身構えて手でアスランを払いのけた。 「そんな事は分かっているっ。けど、嫌なんだ」 「どうしてっ」 「だって兄貴、最後までちゃんと滑らなかったじゃないかっ!」 「・・・なっ」 言いかけてアスランは口を噤む。シンが間髪おかずに続ける。 「これで終わりにしていいのかよ」 言いたいことは分かっても、今更どうすることもできないこともある。アスランが溜め息を付いて、力を入れていた肩から力を抜いた。兄弟の言い争いを黙って聞いているイザークなら理解できるだろうと、シンを説得するのを諦める。 「イザークもこの馬鹿に付き合って、こんな馬鹿な事をしたのか? そんな暇ないだろう。鬼コーチが聞いて呆れる」 「フン。俺は貴様と違って手を抜いた覚えはない」 当てが外れて、アスランは目を瞠った。 まさかイザークまでこの茶番に一枚咬んでいたとは思わなかったのだ。彼が関わっているとなれば、ここでいくら粘っても抗うだけ無駄と言うものだ。アスランは同時代を氷上で競い合い、恐ろしくマメで義理堅い彼を知っている。おそらく、全て綺麗に段取りされているに違いない 「ああ、分かったさ。滑ろというのなら滑ってやる」 二人の思惑とやらに乗ってやろうじゃないか。 シンとアスラン、二人の兄弟が睨み合う。 「だがな、フィギュアはそんな甘いものじゃない!」 4年の歳月は長い。 たとえ最高の演技をしたとしても、自分は所詮の過去の人間だと言うことを誰も良く知っているのは、他でもないアスランなのだから。 「で、イザーク。今の所の順位は?」 「シンは3位。お前は5位だ」 問われたイザークが簡単にSPの結果を伝えると、アスランは少し考えるそぶりを見せて薄く笑う。 「なるほどね。で、あいつの調子は?」 「悪くもなく良くもなくだ。ジャンプには相変わらずムラがあるがな」 シンの売りはスピードとジャンプであるが、少々ムラッケがあった。その日の気分で自慢の4回転も度々4分の1回転足りなくなる。そのシンは少しはなれたところでリンクの演技を見ていた。先程の言い争い依頼一言も口を聞いていない冷戦状態だった。 「つまり俺が焚き付けろってことか」 「それもある」 リンクの中央で大げさに礼をしたスケーターがコーチの元に滑っていき、投げ込まれた花束を回収する小さなスケーターも姿を消した。 「フリーの曲は何だ?」 「4年前の―――」 「ストップ! 止めてくれ、曲なしでいい」 「おいっ」 急に大声を出したイザークの静止も聴かずにアスランがリンクに飛び出し、審査員の横の大会事務局の前に滑っていって何やら伝えている。シンはその様子をじいっと見つめ、兄が滑り出すのを今か今かと待ち構えていた。 曲も流れず、エッジが削る氷の音だけが淡々と響き渡る。 最初こそどよめきが起こったが、すぐに収まり、咳き一つできない静寂がリンクを覆う。 アスランは伴奏なしに5分のフリープログラムを始めた。 シンはリンクの縁を掴んでいた手がジワリと汗ばむのを感じる。 ジャンプの踏み切りで氷の粉が宙を舞い、フィギュアの衣装とは程遠いラフな外出着の青年が聞こえないリズムを刻んでいた。鼓動がどんどん早くなるのをすぐ耳の近くで聞き、仕舞いには息をするのも忘れた。 「アスランの奴・・・どこまでも強情な奴だ」 イザークの呟きも耳に入らず、滑り終えて戻ってくる兄を見つめるしかできなかった。 発表されたフリーの得点に場内が騒然となる。 現在、総合1位。 「これでお前がオリンピックに行くのは難しくなったな」 「兄貴、どうして・・・」 「他人の心配などしている余裕が、お前にあるのか?」 シンは滑るのはラストから2番目だったが、得点のレベルを一気にアスランが押し上げてしまっていた。 どこか馴れ合いだった、下馬評どおりの選手権大会に突如巻き起こった波乱。始まる前からオリンピック出場選手が決まっているようなこの国のスケート界も、実質選考会を兼ねているこの大会の優勝者を代表選手から外すわけにもいかない。 内定していた3人の内の誰かが落ちるのだ。 それは、もしかしたら、シンかも知れない。 「腰抜けがっ、何をビビッているっ」 「ビビッてなんかいないっ!!」 イザークはシンの肩を叩いて激励する頃には会場は異常な熱気で充満していた。トップを争う華麗さや成熟した滑りを売りにする選手でさえ、スイッチが入ったようだった。 「いつもどおりの演技をしろ。アスランの点は決して抜けない点じゃない。あいつは4回転を飛んでないからな、逆転のチャンスはある」 「はいっ!」 「全力で行って来い!」 勢い良くリンクに出て行くシン。 その身体は軍服のような飾りの付いた赤い衣装を纏っていた。 「がんばれよ、シン」 アスランが呟く。 リンクの縁から鬼コーチと今、リンクに立つ選手の兄が小声で会話をする。 「一躍トップに躍り出て、且つ、全力を尽くせば決して届かない位置じゃない点か?」 「これが俺の限界だよ。5分も全力で滑りきれないさ」 「トップ3の奴らは確実に180点台に乗せてくるぞ」 「しっ、始まった・・・」 決して大きくはない身体を目一杯伸ばして、シンは鋭いエッジから景気づけの4回転を跳んだ。 スケート連盟から連絡があって嬉々として電話に出たシンは最初こそガッツポーズをしたが、次第に肩を落として静かに受話器を置いた。 エプロンを外す兄を見て泣きそうになる。 オリンピックへの切符は一枚しか手に入らなかったのだ。 沈んだシンとは対照的に、アスランはさもありなんとした顔で食卓に付く。 「お前な、俺があっさりオリンピックに出てみろ、この4年間がんばって練習してきた奴に失礼だぞ。ほら、気持ちを切り替えて、食べる!」 「でも、さ」 選手権大会の上位3名が代表選手に選ばれたのだ。アスランは惜しくも4位に終わり、話題を一時的に提供したが、代表選手が発表される頃にはシン・アスカの兄という認識に変わっていた。 「シン」 アスランがうつむいたままの弟を見た。 背の低いシンは椅子に座っていても僅かにアスランに見下ろされるようになる。 「お前はこの国の代表選手なんだぞ、俺の事より自分の事をもっと喜べ」 シンの国で代表選手が決定したように、各国で様々な種目のオリンピック代表選手決定のニュースが踊る。 「スカンジナビア行きおめでとう!」 「応援してくださって、ありがとうございます。バルトフェルトさん」 濃いサングラスをした男が突然ハハハと笑い出す。かなり失礼なその態度も、笑われた相手にとっては慣れているのか、口を尖らせただけで済んだ。 「まあ、そうだな。君が代表に選ばれないなんて1パーセントも思っていなかったがな、応援はしていたよ」 「これでもかなり緊張したんですけど」 「4年間トップを明け渡したことのないフィギュアの帝王が何を言う。そう言えば・・・面白いニュースを耳にした」 戻る 次へ 間が開いていると駄目ですね。眠らせておいてもちっともよくならないし、う~ん、精進精進!
https://w.atwiki.jp/nothing/pages/411.html
「いい感じだ。途中でヒヤッとしたがな、よく持ち直した」 ショートプログラムを滑り終えたシンにイザークが声を掛けた。アスランには練習に付き合って欲しいと言ったが、そんなことはない、とっくに本選は始まっている。 フィギュアスケートの大会はショートプログラムとフリープログラムの二つで演技で争われる。定められた技を盛り込んで演技するショートプログラムと、4分半という時間内を自由に演技するフリープログラム。今はショートプラグラムが行われていた。 出場選手とリンクに掛かるそれぞれの曲がリンクに響く。 そこにシンの携帯がいいタイミングで小さく鳴った。 「あっ、兄貴からだ」 イザークが頷き、シンは携帯を握り締めた。 「登録と曲は提出してある。行けっ、ギリギリまで引き伸ばして連れて来い」 「分かってる」 シンはリンクの端でイザークと打ち合わせをして、ブレードにカバーを付ける。携帯の着信には『いま付いた』と兄から連絡が入っていた。ジャージを引っ掛けて入り口に向かい、大きなデイバックを背負ったアスランを見つけて手を振った。 「シン!」 「こっち―――っ!」 ブンブンと手を振るシンはとてもオリンピックを出場を目指すスケーターには見えない。そういうところがやんちゃ王子というあだ名につながるのだろうなと、アスランは苦笑して歩みを早める。 「お前な・・・今日は大会なんだからもうちょっと緊張感を持てよ。いくら、いつも使っているリンクだからって・・・な」 「あっ、これでもすっごい緊張してんだよっ!」 頭をぐりぐりとやるアスランを引っ張ってシンはリンクへと向かうが、その通路は微妙にいつもと違っていた。関係者もまばらに、施設の裏設備がいくつもむき出しになっている通路を通る。 「なんだ、大会で入り口が変わったのか?」 「色々めんどくさいんだな、これが」 アスランとてかつて一度は通った道である。今は弟の練習に付き合う程度にしか滑らないが、かつてはオリンピックへの切符を手にしたスケーターだったのだ。4年前の出来事を思い出して遠い目をする。 「俺の時よりさらに複雑になっているなあ」 シンは感慨深く呟くアスランを後ろ目でチラリと伺って、人のいない休憩所で自販機のコーヒーを買う。壁にかけられた時計を見上げ、そして気持ち睨みつけていた。アスランによっては懐かしい思い出でも、シンにとってはそうではなかった。 怪我で兄はスケートを止めてしまったが、それだって滑れなくなるほどの怪我じゃなかったのだ。ちょっと精神的なもので、シンにとって絶対だった目標がふいに掻き消えてしまった4年前。 離婚した母が亡くなって初めて兄がいる事を知った、あの時から、常にシンの前にあった背中。憧れや反発だけで括れない存在だったのに。 あっけなくスケートを止めてしまった兄が、腹立たしくて。 リンクに連れ戻せない自分が、不甲斐無くて。 ようやく、4年前と同じ位置に付けた。 この4年間、随分と頑張ってきたと思う。自分のことでも、兄のことでも。 理由をつけて少しでもリンクに立たせた。 全てはもう一度、兄をオリンピックのリンクに立たせるためだ。 兄弟揃って、表彰台に上る。 できれば、俺が天辺に立って、横にいる兄貴を抱きしめたい。 コーチのイザークと画策して今日、アスランに選考会で滑ってもらう。 時計の針が打ち合わせした文字に係り、兄の順番が回ってくる。 シンとアスランがリンクに戻ってきた時、会場内は少しだけ騒然としていた。シンにはそれがアナウンスがされたのになかなか氷上に現れない選手を気を揉んでの事だと分かっていた。 その選手が4年前にスケートを止めたオリンピック選手ときたら尚更だ。しかし、アスランにはそれは分からない。 「久しぶりだな、アスラン」 「イザークも・・・シンを鍛えてくれてありがとう」 「何を言っている、勝負はこれからだ」 コーチが顎をしゃくった先にはシンがリンクに下りて、ブレードをネジを絞めている。しかし、ガチャガチャと音がしてドライバーが氷の上に落下する。 「練習ごときで、ったく、腰抜けがっ」 「ウルサイッ!」 拾うとして伸ばしたシンの指先が、ドライバーを弾く。 「お前、本当に大丈夫か? 手が震えているぞ?」 「今は昔と違うのっ!」 「何だとっ、規程からSPにカテゴリは変わったけど、基本ができなきゃフリーなんてできもしないんだぞっ!」 個性的な技は勿論だが、フリーの演技も所詮は得点の高いジャンプやスピンなどを一つ一つ決める事で決まるのだ。 「そんな事言うなら、兄貴、やってみろよ! ちょうどタイミングよく今リンク空いてるし!」 「俺ができたって意味ないだろっ!」 練習に付き合っているからアスランとてショートプログラムに織り交ぜるべき内容を知っている。『俺ならこう組み立てる』と助言したこともある。 「兄貴だって怖いんじゃないか?」 シンはアスランのデイバックからスケート靴を取り出して差し出す。 「さあ!!」 さすがにこれ以上待たせるわけにいかないと、イザークがため息を付いた。 「3分くらいすぐだ。滑ってきてやれ、アスラン」 「イザークまで・・・」 ブレードのケースを外してリンクに降りたアスランを見送って、イザークが軽く手を上げる。リンクに流れだしたのはいつも練習場で流れていたBGMだった。 ジャンプ3つ。 スピンも3つ。 ステップが2つ。 情緒もなくひょいひょいと機械的にこなす。 滑り終えたアスランを待っていたのは奇妙な静寂で、シンに向かって軽く一礼しただけでリンクから上がってしまった。イザークが選考委員に向かって頭を下げ、シンは慌ててアスランをリンクから連れ去った。 「おいっ、シン!」 「いいから、黙ってっ」 「ちょっと待て、一体、何なんだっ!!」 さっきまで時間を潰していた休憩所で、シンはぜーぜーと息をついた。その様子をアスランは腕を組んで眺めて、眉を寄せた。 「お前、何か企んでいるな?」 シンは鼓動が収まるのをじっと待った。 たった3分の事なのに、目を奪われていた。シンだってオリンピックを狙うスケーターだから、兄の滑ったSPがどれだけのものか分かる。 「兄貴に分かるもんかっ。俺だって必死に頑張ったのに、すっげー悔しい」 悔しいのに、自慢したい。 自慢したいのに、取られたくない。 俺だけの秘密にしておきたい。 まあ、イザークは知っているけれど、あいつは別格だからいい。 「何を言っているんだ。お前のSPはこれからだろ?」 そして後ろめたさを感じるほどには、シンは純情だった。 全部全部、これは俺のわがままから来ているのだと分かっていた。 「もう終わった」 額をつけていた自販機から頭を離して、アスランに向き直った。 「この後あるのは、フリーだよ。兄貴も滑るんだ」 アスランが怪訝な顔して、目を細めた。シンの悪巧みに気が付いたのだろう、握り締められた拳が震えている。 「お前・・・何を勝手に・・・」 怒鳴りつける一歩手前の様子にシンは身構えたが、タイミングよく休憩所に見知った姿が現れた。 「そうですよね、コーチ」 「イザーク・・・」 戻る 次へ コメントはなしの方向で。まだ、何となく、イメージが・・・なぜか笑いが込み上げて来るんだよな~
https://w.atwiki.jp/battlepirates/pages/58.html
Siegeクラス概要 Researchable hulls HammerHead Blueprint hulls Buccaneer Cannoneer Centurion Crusader Dreadnought Eradicator Fusion Cruiser HellHound Hydra Siege Cruiser Ironclad Juggernaut X Nuclear Cruiser Proto-Centurion Punisher Shrike Strike Cruiser X Vanguard Vindicator Limited hulls Avenger Blood Hydra Brutal Eradicator Buccaneer's Boon Greta s Nuclear Cruiser Harlock s Cannoneer Harlock s Centurion Harlock s Ironclad HellBlazer High-Lander s Nuclear Cruiser Templar Solon s Shrike Unshackled HellHound Vassago s Punisher コメント Researchable hulls HammerHead Blueprint hulls Buccaneer Cannoneer Centurion 自身の周囲にsplashダメージを減少させるフィールドを展開している。 効果は重ねがけ可能で、5隻まとめておけば0.8^5=約0.33でダメージ1/3になる計算。 所感 foundryのsiegeツリーtier4艦。攻撃・防御・機動性のすべてがcrusaderから順当に進化している。 ただしunreactiveが無いので、ランチャー相手には少し慎重に。 Crusader 自身の周囲にsplashダメージを減少させるフィールドを展開している。 効果は重ねがけ可能で、5隻まとめておけば0.8^5=約0.33でダメージ1/3になる計算。 同じ目標に射撃を続けるとだんだん命中率が上がっていき、最高で1.5倍になる。 所感 旧foundryのsiegeツリーtier3艦。 実装当時は、この速力でballistic射程+40%を持っている艦は初であり極めて優秀だった。 Dreadnought 所感 旧foundryのsiegeツリーtier1艦。 姉妹艦のdreadnoughtXはmortar艦で、こちらはcannon艦。 Eradicator +スキン holidangerous eradicator Fusion Cruiser HellHound Hydra Siege Cruiser Ironclad bloodthirstアビリティ持ち。リロードが速くなり、防御は大きく向上する。 防壁を除く基地施設や砲台などを破壊すると効果アップしていき、5個破壊で効果最大となる。 所感 siegeターゲットを破壊するための重装甲艦。短射程なのでアウトレンジ攻撃は出来ないが、とても頑丈。 DMB,SDG,帝国基地、ウラン基地の攻略に役立つ。 splashボーナスが極めて大きく、splash付きcannonを装備するとmortar並みの広範囲攻撃が可能となる。 Juggernaut X Nuclear Cruiser Proto-Centurion Punisher 所感 攻撃・防御・回避が高水準で揃った優秀な艦。電磁砲系の貫通距離を+35伸ばす能力を持っている。 防御性能を買われて、迎撃・防御特化の盾艦として使われることも多い。 Shrike +スキン holidangerous shrike Strike Cruiser X Vanguard Vindicator 所感 旧foundryのsiegeツリーtier2艦。攻撃性能はそれほどでもないが、すべての兵器の命中率にボーナスが付く。 特定の種類の兵器ではなく「すべて」というのがミソで、これには当然迎撃兵器も含まれる。 脆いのがネックだが、序盤においては優秀な迎撃艦となる。上手く守って使ってやろう。 Limited hulls Avenger Blood Hydra Brutal Eradicator +スキン holidangerous brutal eradicator Buccaneer s Boon Greta s Nuclear Cruiser Harlock s Cannoneer Harlock s Centurion Harlock s Ironclad HellBlazer High-Lander s Nuclear Cruiser Templar Unshackled HellHound Vassago s Punisher 名前
https://w.atwiki.jp/anison-rap/pages/35.html
【曲名】 Viewtiful World 【アーティスト】 Viewtiful Joe ※ 【作詞】 【作曲】 【編曲】 【作品】 VIEWTIFUL JOE 【メディア】 GC用VFXアクションゲーム 【テーマ】 エンディングテーマ 【初出】 2003年 【備考】 CGゲームキャラたちによるバンド演奏のPVがとにかく秀逸!! ※「Viewtiful Joe」はDA PUMPのKEN,DAIの長尾大,大渡亮,ZZのSOTARO,03の古市絢子の5人による覆面バンド
https://w.atwiki.jp/nobunyaganoyabou/pages/14.html
/** * Table.js * Functions for interactive Tables * * Copyright (c) 2007 Matt Kruse (javascripttoolbox.com) * Dual licensed under the MIT and GPL licenses. * * @version 0.981 * * @history 0.981 2007-03-19 Added Sort.numeric_comma, additional date parsing formats * @history 0.980 2007-03-18 Release new BETA release pending some testing. Todo Additional docs, examples, plus jQuery plugin. * @history 0.959 2007-03-05 Added more "auto" functionality, couple bug fixes * @history 0.958 2007-02-28 Added auto functionality based on class names * @history 0.957 2007-02-21 Speed increases, more code cleanup, added Auto Sort functionality * @history 0.956 2007-02-16 Cleaned up the code and added Auto Filter functionality. * @history 0.950 2006-11-15 First BETA release. * * @todo Add more date format parsers * @todo Add style classes to colgroup tags after sorting/filtering in case the user wants to highlight the whole column * @todo Correct for colspans in data rows (this may slow it down) * @todo Fix for IE losing form control values after sort? */ /** * Sort Functions */ var Sort = (function(){ var sort = {}; // Default alpha-numeric sort // -------------------------- sort.alphanumeric = function(a,b) { return (a==b)?0 (a b)?-1 1; }; sort[ default ] = sort.alphanumeric; // IE chokes on sort.default // This conversion is generalized to work for either a decimal separator of , or . sort.numeric_converter = function(separator) { return function(val) { if (typeof(val)=="string") { val = parseFloat(val.replace(/^[^\d\.]*([\d., ]+).*/g,"$1").replace(new RegExp("[^\\\d"+separator+"]","g"), ).replace(/,/, . )) || 0; } return val || 0; }; }; // Numeric Sort // ------------ sort.numeric = function(a,b) { return sort.numeric.convert(a)-sort.numeric.convert(b); }; sort.numeric.convert = sort.numeric_converter("."); // Numeric Sort - comma decimal separator // -------------------------------------- sort.numeric_comma = function(a,b) { return sort.numeric_comma.convert(a)-sort.numeric_comma.convert(b); }; sort.numeric_comma.convert = sort.numeric_converter(","); // Case-insensitive Sort // --------------------- sort.ignorecase = function(a,b) { return sort.alphanumeric(sort.ignorecase.convert(a),sort.ignorecase.convert(b)); }; sort.ignorecase.convert = function(val) { if (val==null) { return ""; } return (""+val).toLowerCase(); }; // Currency Sort // ------------- sort.currency = sort.numeric; // Just treat it as numeric! sort.currency_comma = sort.numeric_comma; // Date sort // --------- sort.date = function(a,b) { return sort.numeric(sort.date.convert(a),sort.date.convert(b)); }; // Convert 2-digit years to 4 sort.date.fixYear=function(yr) { yr = +yr; if (yr 50) { yr += 2000; } else if (yr 100) { yr += 1900; } return yr; }; sort.date.formats = [ // YY[YY]-MM-DD { re /(\d{2,4})-(\d{1,2})-(\d{1,2})/ , f function(x){ return (new Date(sort.date.fixYear(x[1]),+x[2],+x[3])).getTime(); } } // MM/DD/YY[YY] or MM-DD-YY[YY] ,{ re /(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/ , f function(x){ return (new Date(sort.date.fixYear(x[3]),+x[1],+x[2])).getTime(); } } // Any catch-all format that new Date() can handle. This is not reliable except for long formats, for example 31 Jan 2000 01 23 45 GMT ,{ re /(.*\d{4}.*\d+ \d+\d+.*)/, f function(x){ var d=new Date(x[1]); if(d){return d.getTime();} } } ]; sort.date.convert = function(val) { var m,v, f = sort.date.formats; for (var i=0,L=f.length; i L; i++) { if (m=val.match(f[i].re)) { v=f[i].f(m); if (typeof(v)!="undefined") { return v; } } } return 9999999999999; // So non-parsed dates will be last, not first }; return sort; })(); /** * The main Table namespace */ var Table = (function(){ /** * Determine if a reference is defined */ function def(o) {return (typeof o!="undefined");}; /** * Determine if an object or class string contains a given class. */ function hasClass(o,name) { return new RegExp("(^|\\s)"+name+"(\\s|$)").test(o.className); }; /** * Add a class to an object */ function addClass(o,name) { var c = o.className || ""; if (def(c) !hasClass(o,name)) { o.className += (c?" " "") + name; } }; /** * Remove a class from an object */ function removeClass(o,name) { var c = o.className || ""; o.className = c.replace(new RegExp("(^|\\s)"+name+"(\\s|$)"),"$1"); }; /** * For classes that match a given substring, return the rest */ function classValue(o,prefix) { var c = o.className; if (c.match(new RegExp("(^|\\s)"+prefix+"([^ ]+)"))) { return RegExp.$2; } return null; }; /** * Return true if an object is hidden. * This uses the "russian doll" technique to unwrap itself to the most efficient * function after the first pass. This avoids repeated feature detection that * would always fall into the same block of code. */ function isHidden(o) { if (window.getComputedStyle) { var cs = window.getComputedStyle; return (isHidden = function(o) { return none ==cs(o,null).getPropertyValue( display ); })(o); } else if (window.currentStyle) { return(isHidden = function(o) { return none ==o.currentStyle[ display ]; })(o); } return (isHidden = function(o) { return none ==o.style[ display ]; })(o); }; /** * Get a parent element by tag name, or the original element if it is of the tag type */ function getParent(o,a,b) { if (o!=null o.nodeName) { if (o.nodeName==a || (b o.nodeName==b)) { return o; } while (o=o.parentNode) { if (o.nodeName (o.nodeName==a || (b o.nodeName==b))) { return o; } } } return null; }; /** * Utility function to copy properties from one object to another */ function copy(o1,o2) { for (var i=2;i arguments.length; i++) { var a = arguments[i]; if (def(o1[a])) { o2[a] = o1[a]; } } } // The table object itself var table = { //Class names used in the code AutoStripeClassName "table-autostripe", StripeClassNamePrefix "table-stripeclass ", AutoSortClassName "table-autosort", AutoSortColumnPrefix "table-autosort ", AutoSortTitle "Click to sort", SortedAscendingClassName "table-sorted-asc", SortedDescendingClassName "table-sorted-desc", SortableClassName "table-sortable", SortableColumnPrefix "table-sortable ", NoSortClassName "table-nosort", AutoFilterClassName "table-autofilter", FilteredClassName "table-filtered", FilterableClassName "table-filterable", FilteredRowcountPrefix "table-filtered-rowcount ", RowcountPrefix "table-rowcount ", FilterAllLabel "Filter All", AutoPageSizePrefix "table-autopage ", AutoPageJumpPrefix "table-page ", PageNumberPrefix "table-page-number ", PageCountPrefix "table-page-count " }; /** * A place to store misc table information, rather than in the table objects themselves */ table.tabledata = {}; /** * Resolve a table given an element reference, and make sure it has a unique ID */ table.uniqueId=1; table.resolve = function(o,args) { if (o!=null o.nodeName o.nodeName!="TABLE") { o = getParent(o,"TABLE"); } if (o==null) { return null; } if (!o.id) { var id = null; do { var id = "TABLE_"+(table.uniqueId++); } while (document.getElementById(id)!=null); o.id = id; } this.tabledata[o.id] = this.tabledata[o.id] || {}; if (args) { copy(args,this.tabledata[o.id],"stripeclass","ignorehiddenrows","useinnertext","sorttype","col","desc","page","pagesize"); } return o; }; /** * Run a function against each cell in a table header or footer, usually * to add or remove css classes based on sorting, filtering, etc. */ table.processTableCells = function(t, type, func, arg) { t = this.resolve(t); if (t==null) { return; } if (type!="TFOOT") { this.processCells(t.tHead, func, arg); } if (type!="THEAD") { this.processCells(t.tFoot, func, arg); } }; /** * Internal method used to process an arbitrary collection of cells. * Referenced by processTableCells. * It s done this way to avoid getElementsByTagName() which would also return nested table cells. */ table.processCells = function(section,func,arg) { if (section!=null) { if (section.rows section.rows.length section.rows.length 0) { var rows = section.rows; for (var j=0,L2=rows.length; j L2; j++) { var row = rows[j]; if (row.cells row.cells.length row.cells.length 0) { var cells = row.cells; for (var k=0,L3=cells.length; k L3; k++) { var cellsK = cells[k]; func.call(this,cellsK,arg); } } } } } }; /** * Get the cellIndex value for a cell. This is only needed because of a Safari * bug that causes cellIndex to exist but always be 0. * Rather than feature-detecting each time it is called, the function will * re-write itself the first time it is called. */ table.getCellIndex = function(td) { var tr = td.parentNode; var cells = tr.cells; if (cells cells.length) { if (cells.length 1 cells[cells.length-1].cellIndex 0) { // Define the new function, overwrite the one we re running now, and then run the new one (this.getCellIndex = function(td) { return td.cellIndex; })(td); } // Safari will always go through this slower block every time. Oh well. for (var i=0,L=cells.length; i L; i++) { if (tr.cells[i]==td) { return i; } } } return 0; }; /** * A map of node names and how to convert them into their "value" for sorting, filtering, etc. * These are put here so it is extensible. */ table.nodeValue = { INPUT function(node) { if (def(node.value) node.type ((node.type!="checkbox" node.type!="radio") || node.checked)) { return node.value; } return ""; }, SELECT function(node) { if (node.selectedIndex =0 node.options) { // Sort select elements by the visible text return node.options[node.selectedIndex].text; } return ""; }, IMG function(node) { return node.name || ""; } }; /** * Get the text value of a cell. Only use innerText if explicitly told to, because * otherwise we want to be able to handle sorting on inputs and other types */ table.getCellValue = function(td,useInnerText) { if (useInnerText def(td.innerText)) { return td.innerText; } if (!td.childNodes) { return ""; } var childNodes=td.childNodes; var ret = ""; for (var i=0,L=childNodes.length; i L; i++) { var node = childNodes[i]; var type = node.nodeType; // In order to get realistic sort results, we need to treat some elements in a special way. // These behaviors are defined in the nodeValue() object, keyed by node name if (type==1) { var nname = node.nodeName; if (this.nodeValue[nname]) { ret += this.nodeValue[nname](node); } else { ret += this.getCellValue(node); } } else if (type==3) { if (def(node.innerText)) { ret += node.innerText; } else if (def(node.nodeValue)) { ret += node.nodeValue; } } } return ret; }; /** * Consider colspan and rowspan values in table header cells to calculate the actual cellIndex * of a given cell. This is necessary because if the first cell in row 0 has a rowspan of 2, * then the first cell in row 1 will have a cellIndex of 0 rather than 1, even though it really * starts in the second column rather than the first. * See http //www.javascripttoolbox.com/temp/table_cellindex.html */ table.tableHeaderIndexes = {}; table.getActualCellIndex = function(tableCellObj) { if (!def(tableCellObj.cellIndex)) { return null; } var tableObj = getParent(tableCellObj,"TABLE"); var cellCoordinates = tableCellObj.parentNode.rowIndex+"-"+this.getCellIndex(tableCellObj); // If it has already been computed, return the answer from the lookup table if (def(this.tableHeaderIndexes[tableObj.id])) { return this.tableHeaderIndexes[tableObj.id][cellCoordinates]; } var matrix = []; this.tableHeaderIndexes[tableObj.id] = {}; var thead = getParent(tableCellObj,"THEAD"); var trs = thead.getElementsByTagName( TR ); // Loop thru every tr and every cell in the tr, building up a 2-d array "grid" that gets // populated with an "x" for each space that a cell takes up. If the first cell is colspan // 2, it will fill in values [0] and [1] in the first array, so that the second cell will // find the first empty cell in the first row (which will be [2]) and know that this is // where it sits, rather than its internal .cellIndex value of [1]. for (var i=0; i trs.length; i++) { var cells = trs[i].cells; for (var j=0; j cells.length; j++) { var c = cells[j]; var rowIndex = c.parentNode.rowIndex; var cellId = rowIndex+"-"+this.getCellIndex(c); var rowSpan = c.rowSpan || 1; var colSpan = c.colSpan || 1; var firstAvailCol; if(!def(matrix[rowIndex])) { matrix[rowIndex] = []; } var m = matrix[rowIndex]; // Find first available column in the first row for (var k=0; k m.length+1; k++) { if (!def(m[k])) { firstAvailCol = k; break; } } this.tableHeaderIndexes[tableObj.id][cellId] = firstAvailCol; for (var k=rowIndex; k rowIndex+rowSpan; k++) { if(!def(matrix[k])) { matrix[k] = []; } var matrixrow = matrix[k]; for (var l=firstAvailCol; l firstAvailCol+colSpan; l++) { matrixrow[l] = "x"; } } } } // Store the map so future lookups are fast. return this.tableHeaderIndexes[tableObj.id][cellCoordinates]; }; /** * Sort all rows in each TBODY (tbodies are sorted independent of each other) */ table.sort = function(o,args) { var t, tdata, sortconvert=null; // Allow for a simple passing of sort type as second parameter if (typeof(args)=="function") { args={sorttype args}; } args = args || {}; // If no col is specified, deduce it from the object sent in if (!def(args.col)) { args.col = this.getActualCellIndex(o) || 0; } // If no sort type is specified, default to the default sort args.sorttype = args.sorttype || Sort[ default ]; // Resolve the table t = this.resolve(o,args); tdata = this.tabledata[t.id]; // If we are sorting on the same column as last time, flip the sort direction if (def(tdata.lastcol) tdata.lastcol==tdata.col def(tdata.lastdesc)) { tdata.desc = !tdata.lastdesc; } else { tdata.desc = !!args.desc; } // Store the last sorted column so clicking again will reverse the sort order tdata.lastcol=tdata.col; tdata.lastdesc=!!tdata.desc; // If a sort conversion function exists, pre-convert cell values and then use a plain alphanumeric sort var sorttype = tdata.sorttype; if (typeof(sorttype.convert)=="function") { sortconvert=tdata.sorttype.convert; sorttype=Sort.alphanumeric; } // Loop through all THEADs and remove sorted class names, then re-add them for the col // that is being sorted this.processTableCells(t,"THEAD", function(cell) { if (hasClass(cell,this.SortableClassName)) { removeClass(cell,this.SortedAscendingClassName); removeClass(cell,this.SortedDescendingClassName); // If the computed colIndex of the cell equals the sorted colIndex, flag it as sorted if (tdata.col==table.getActualCellIndex(cell) (classValue(cell,table.SortableClassName))) { addClass(cell,tdata.desc?this.SortedAscendingClassName this.SortedDescendingClassName); } } } ); // Sort each tbody independently var bodies = t.tBodies; if (bodies==null || bodies.length==0) { return; } // Define a new sort function to be called to consider descending or not var newSortFunc = (tdata.desc)? function(a,b){return sorttype(b[0],a[0]);} function(a,b){return sorttype(a[0],b[0]);}; var useinnertext=!!tdata.useinnertext; var col = tdata.col; for (var i=0,L=bodies.length; i L; i++) { var tb = bodies[i], tbrows = tb.rows, rows = []; // Allow tbodies to request that they not be sorted if(!hasClass(tb,table.NoSortClassName)) { // Create a separate array which will store the converted values and refs to the // actual rows. This is the array that will be sorted. var cRow, cRowIndex=0; if (cRow=tbrows[cRowIndex]){ // Funky loop style because it s considerably faster in IE do { if (rowCells = cRow.cells) { var cellValue = (col rowCells.length)?this.getCellValue(rowCells[col],useinnertext) null; if (sortconvert) cellValue = sortconvert(cellValue); rows[cRowIndex] = [cellValue,tbrows[cRowIndex]]; } } while (cRow=tbrows[++cRowIndex]) } // Do the actual sorting rows.sort(newSortFunc); // Move the rows to the correctly sorted order. Appending an existing DOM object just moves it! cRowIndex=0; var displayedCount=0; var f=[removeClass,addClass]; if (cRow=rows[cRowIndex]){ do { tb.appendChild(cRow[1]); } while (cRow=rows[++cRowIndex]) } } } // If paging is enabled on the table, then we need to re-page because the order of rows has changed! if (tdata.pagesize) { this.page(t); // This will internally do the striping } else { // Re-stripe if a class name was supplied if (tdata.stripeclass) { this.stripe(t,tdata.stripeclass,!!tdata.ignorehiddenrows); } } }; /** * Apply a filter to rows in a table and hide those that do not match. */ table.filter = function(o,filters,args) { var cell; args = args || {}; var t = this.resolve(o,args); var tdata = this.tabledata[t.id]; // If new filters were passed in, apply them to the table s list of filters if (!filters) { // If a null or blank value was sent in for filters then that means reset the table to no filters tdata.filters = null; } else { // Allow for passing a select list in as the filter, since this is common design if (filters.nodeName=="SELECT" filters.type=="select-one" filters.selectedIndex -1) { filters={ filter filters.options[filters.selectedIndex].value }; } // Also allow for a regular input if (filters.nodeName=="INPUT" filters.type=="text") { filters={ filter "/^"+filters.value+"/" }; } // Force filters to be an array if (typeof(filters)=="object" !filters.length) { filters = [filters]; } // Convert regular expression strings to RegExp objects and function strings to function objects for (var i=0,L=filters.length; i L; i++) { var filter = filters[i]; if (typeof(filter.filter)=="string") { // If a filter string is like "/expr/" then turn it into a Regex if (filter.filter.match(/^\/(.*)\/$/)) { filter.filter = new RegExp(RegExp.$1); filter.filter.regex=true; } // If filter string is like "function (x) { ... }" then turn it into a function else if (filter.filter.match(/^function\s*\(([^\)]*)\)\s*\{(.*)}\s*$/)) { filter.filter = Function(RegExp.$1,RegExp.$2); } } // If some non-table object was passed in rather than a col value, resolve it // and assign it s column index to the filter if it doesn t have one. This way, // passing in a cell reference or a select object etc instead of a table object // will automatically set the correct column to filter. if (filter !def(filter.col) (cell=getParent(o,"TD","TH"))) { filter.col = this.getCellIndex(cell); } // Apply the passed-in filters to the existing list of filters for the table, removing those that have a filter of null or "" if ((!filter || !filter.filter) tdata.filters) { delete tdata.filters[filter.col]; } else { tdata.filters = tdata.filters || {}; tdata.filters[filter.col] = filter.filter; } } // If no more filters are left, then make sure to empty out the filters object for (var j in tdata.filters) { var keep = true; } if (!keep) { tdata.filters = null; } } // Everything s been setup, so now scrape the table rows return table.scrape(o); }; /** * "Page" a table by showing only a subset of the rows */ table.page = function(t,page,args) { args = args || {}; if (def(page)) { args.page = page; } return table.scrape(t,args); }; /** * Jump forward or back any number of pages */ table.pageJump = function(t,count,args) { t = this.resolve(t,args); return this.page(t,(table.tabledata[t.id].page||0)+count,args); }; /** * Go to the next page of a paged table */ table.pageNext = function(t,args) { return this.pageJump(t,1,args); }; /** * Go to the previous page of a paged table */ table.pagePrevious = function(t,args) { return this.pageJump(t,-1,args); }; /** * Scrape a table to either hide or show each row based on filters and paging */ table.scrape = function(o,args) { var col,cell,filterList,filterReset=false,filter; var page,pagesize,pagestart,pageend; var unfilteredrows=[],unfilteredrowcount=0,totalrows=0; var t,tdata,row,hideRow; args = args || {}; // Resolve the table object t = this.resolve(o,args); tdata = this.tabledata[t.id]; // Setup for Paging var page = tdata.page; if (def(page)) { // Don t let the page go before the beginning if (page 0) { tdata.page=page=0; } pagesize = tdata.pagesize || 25; // 25=arbitrary default pagestart = page*pagesize+1; pageend = pagestart + pagesize - 1; } // Scrape each row of each tbody var bodies = t.tBodies; if (bodies==null || bodies.length==0) { return; } for (var i=0,L=bodies.length; i L; i++) { var tb = bodies[i]; for (var j=0,L2=tb.rows.length; j L2; j++) { row = tb.rows[j]; hideRow = false; // Test if filters will hide the row if (tdata.filters row.cells) { var cells = row.cells; var cellsLength = cells.length; // Test each filter for (col in tdata.filters) { if (!hideRow) { filter = tdata.filters[col]; if (filter col cellsLength) { var val = this.getCellValue(cells[col]); if (filter.regex val.search) { hideRow=(val.search(filter) 0); } else if (typeof(filter)=="function") { hideRow=!filter(val,cells[col]); } else { hideRow = (val!=filter); } } } } } // Keep track of the total rows scanned and the total runs _not_ filtered out totalrows++; if (!hideRow) { unfilteredrowcount++; if (def(page)) { // Temporarily keep an array of unfiltered rows in case the page we re on goes past // the last page and we need to back up. Don t want to filter again! unfilteredrows.push(row); if (unfilteredrowcount pagestart || unfilteredrowcount pageend) { hideRow = true; } } } row.style.display = hideRow?"none" ""; } } if (def(page)) { // Check to see if filtering has put us past the requested page index. If it has, // then go back to the last page and show it. if (pagestart =unfilteredrowcount) { pagestart = unfilteredrowcount-(unfilteredrowcount%pagesize); tdata.page = page = pagestart/pagesize; for (var i=pagestart,L=unfilteredrows.length; i L; i++) { unfilteredrows[i].style.display=""; } } } // Loop through all THEADs and add/remove filtered class names this.processTableCells(t,"THEAD", function(c) { ((tdata.filters def(tdata.filters[table.getCellIndex(c)]) hasClass(c,table.FilterableClassName))?addClass removeClass)(c,table.FilteredClassName); } ); // Stripe the table if necessary if (tdata.stripeclass) { this.stripe(t); } // Calculate some values to be returned for info and updating purposes var pagecount = Math.floor(unfilteredrowcount/pagesize)+1; if (def(page)) { // Update the page number/total containers if they exist if (tdata.container_number) { tdata.container_number.innerHTML = page+1; } if (tdata.container_count) { tdata.container_count.innerHTML = pagecount; } } // Update the row count containers if they exist if (tdata.container_filtered_count) { tdata.container_filtered_count.innerHTML = unfilteredrowcount; } if (tdata.container_all_count) { tdata.container_all_count.innerHTML = totalrows; } return { data tdata, unfilteredcount unfilteredrowcount, total totalrows, pagecount pagecount, page page, pagesize pagesize }; }; /** * Shade alternate rows, aka Stripe the table. */ table.stripe = function(t,className,args) { args = args || {}; args.stripeclass = className; t = this.resolve(t,args); var tdata = this.tabledata[t.id]; var bodies = t.tBodies; if (bodies==null || bodies.length==0) { return; } className = tdata.stripeclass; // Cache a shorter, quicker reference to either the remove or add class methods var f=[removeClass,addClass]; for (var i=0,L=bodies.length; i L; i++) { var tb = bodies[i], tbrows = tb.rows, cRowIndex=0, cRow, displayedCount=0; if (cRow=tbrows[cRowIndex]){ // The ignorehiddenrows test is pulled out of the loop for a slight speed increase. // Makes a bigger difference in FF than in IE. // In this case, speed always wins over brevity! if (tdata.ignoreHiddenRows) { do { f[displayedCount++%2](cRow,className); } while (cRow=tbrows[++cRowIndex]) } else { do { if (!isHidden(cRow)) { f[displayedCount++%2](cRow,className); } } while (cRow=tbrows[++cRowIndex]) } } } }; /** * Build up a list of unique values in a table column */ table.getUniqueColValues = function(t,col) { var values={}, bodies = this.resolve(t).tBodies; for (var i=0,L=bodies.length; i L; i++) { var tbody = bodies[i]; for (var r=0,L2=tbody.rows.length; r L2; r++) { values[this.getCellValue(tbody.rows[r].cells[col])] = true; } } var valArray = []; for (var val in values) { valArray.push(val); } return valArray.sort(); }; /** * Scan the document on load and add sorting, filtering, paging etc ability automatically * based on existence of class names on the table and cells. */ table.auto = function(args) { var cells = [], tables = document.getElementsByTagName("TABLE"); var val,tdata; if (tables!=null) { for (var i=0,L=tables.length; i L; i++) { var t = table.resolve(tables[i]); tdata = table.tabledata[t.id]; if (val=classValue(t,table.StripeClassNamePrefix)) { tdata.stripeclass=val; } // Do auto-filter if necessary if (hasClass(t,table.AutoFilterClassName)) { table.autofilter(t); } // Do auto-page if necessary if (val = classValue(t,table.AutoPageSizePrefix)) { table.autopage(t,{ pagesize +val}); } // Do auto-sort if necessary if ((val = classValue(t,table.AutoSortColumnPrefix)) || (hasClass(t,table.AutoSortClassName))) { table.autosort(t,{ col (val==null)?null +val}); } // Do auto-stripe if necessary if (tdata.stripeclass hasClass(t,table.AutoStripeClassName)) { table.stripe(t); } } } }; /** * Add sorting functionality to a table header cell */ table.autosort = function(t,args) { t = this.resolve(t,args); var tdata = this.tabledata[t.id]; this.processTableCells(t, "THEAD", function(c) { var type = classValue(c,table.SortableColumnPrefix); if (type!=null) { type = type || "default"; c.title =c.title || table.AutoSortTitle; addClass(c,table.SortableClassName); c.onclick = Function("","Table.sort(this,{ sorttype Sort[ "+type+" ]})"); // If we are going to auto sort on a column, we need to keep track of what kind of sort it will be if (args.col!=null) { if (args.col==table.getActualCellIndex(c)) { tdata.sorttype=Sort[ "+type+" ]; } } } } ); if (args.col!=null) { table.sort(t,args); } }; /** * Add paging functionality to a table */ table.autopage = function(t,args) { t = this.resolve(t,args); var tdata = this.tabledata[t.id]; if (tdata.pagesize) { this.processTableCells(t, "THEAD,TFOOT", function(c) { var type = classValue(c,table.AutoPageJumpPrefix); if (type=="next") { type = 1; } else if (type=="previous") { type = -1; } if (type!=null) { c.onclick = Function("","Table.pageJump(this,"+type+")"); } } ); if (val = classValue(t,table.PageNumberPrefix)) { tdata.container_number = document.getElementById(val); } if (val = classValue(t,table.PageCountPrefix)) { tdata.container_count = document.getElementById(val); } return table.page(t,0,args); } }; /** * A util function to cancel bubbling of clicks on filter dropdowns */ table.cancelBubble = function(e) { e = e || window.event; if (typeof(e.stopPropagation)=="function") { e.stopPropagation(); } if (def(e.cancelBubble)) { e.cancelBubble = true; } }; /** * Auto-filter a table */ table.autofilter = function(t,args) { args = args || {}; t = this.resolve(t,args); var tdata = this.tabledata[t.id],val; table.processTableCells(t, "THEAD", function(cell) { if (hasClass(cell,table.FilterableClassName)) { var cellIndex = table.getCellIndex(cell); var colValues = table.getUniqueColValues(t,cellIndex); if (colValues.length 0) { if (typeof(args.insert)=="function") { func.insert(cell,colValues); } else { var sel = select onchange="Table.filter(this,this)" onclick="Table.cancelBubble(event)" class=" +table.AutoFilterClassName+ " option value="" +table.FilterAllLabel+ /option ; for (var i=0; i colValues.length; i++) { sel += option value=" +colValues[i]+ " +colValues[i]+ /option ; } sel += /select ; cell.innerHTML += " br "+sel; } } } }); if (val = classValue(t,table.FilteredRowcountPrefix)) { tdata.container_filtered_count = document.getElementById(val); } if (val = classValue(t,table.RowcountPrefix)) { tdata.container_all_count = document.getElementById(val); } }; /** * Attach the auto event so it happens on load. * use jQuery s ready() function if available */ if (typeof(jQuery)!="undefined") { jQuery(table.auto); } else if (window.addEventListener) { window.addEventListener( "load", table.auto, false ); } else if (window.attachEvent) { window.attachEvent( "onload", table.auto ); } return table; })();